1035. Cousins in Binary Tree

Problem:

In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k+1.

Two nodes of a binary tree are cousins if they have the same depth, but have different parents.

We are given the root of a binary tree with unique values, and the values x and y of two different nodes in the tree.

Return true if and only if the nodes corresponding to the values x and y are cousins.

 

Example 1:

Input: root = [1,2,3,4], x = 4, y = 3
Output: false

Example 2:

Input: root = [1,2,3,null,4,null,5], x = 5, y = 4
Output: true

Example 3:

Input: root = [1,2,3,null,4], x = 2, y = 3
Output: false

 

Note:

  1. The number of nodes in the tree will be between 2 and 100.
  2. Each node has a unique integer value from 1 to 100.

 
</div> </div>

Solutions:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isCousins(TreeNode* root, int x, int y) {
        int levels[2] = {-1, -2};
        queue<TreeNode*> q;

        int level = 0;
        q.push(root);
        while (!q.empty()) {
            int size = q.size();
            for (int i = 0; i < size; ++i) {
                TreeNode* node = q.front(); q.pop();
                if (node == nullptr)   continue;
                if (node->val == x) levels[0] = level;
                if (node->val == y) levels[1] = level;
                if (levels[0] == levels[1]) return true;
                if (node->left && node->right && (node->left->val == x && node->right->val == y || node->left->val == y && node->right->val == x))  return false;
                q.push(node->left);
                q.push(node->right);
            }
            ++level;
        }

        return false;
    }
};

results matching ""

    No results matching ""