993. Cousins in Binary Tree
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
思路:
求解x,y的深度和父亲结点,如果深度一样,父亲结点不同,就是true;否则,就是false。
/** * 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: TreeNode *getDepth(TreeNode* root, int val, int depth, int &level) { if (!root) return nullptr; //找到val的父亲,并设置val的depth if ((root->left && root->left->val == val) || (root->right && root->right->val == val)) { level = depth; return root; } TreeNode *left = getDepth(root->left, val, depth + 1, level); if (left) return left; TreeNode *right = getDepth(root->right, val, depth + 1, level); if (right) return right; return nullptr; } bool isCousins(TreeNode *root, int x, int y) { int x_depth = -1, y_depth = -1; TreeNode *x_parent = getDepth(root, x, 0, x_depth); TreeNode *y_parent = getDepth(root, y, 0, y_depth); if (x_depth == y_depth && x_parent != y_parent) { return true; } return false; } };