Cousins in Binary Tree
update Feb 18 2019, 1:40
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:
The number of nodes in the tree will be between 2 and 100.
Each node has a unique integer value from 1 to 100.
Basic Idea:
用一个helper function,返回所要找的node的depth和parent。分别用helper找到两个node的信息,然后判断它们是否有相同的深度不同的parent。
Java Code:
class Solution {
public boolean isCousins(TreeNode root, int x, int y) {
if (root == null) return false;
int[] info_x = helper(root, null, 0, x);
int[] info_y = helper(root, null, 0, y);
if (info_x == null || info_y == null) return false;
return info_x[0] == info_y[0] && info_x[1] != info_y[1];
}
// ret[0]: depth
// ret[1]: parent
private int[] helper(TreeNode root, TreeNode parent, int depth, int target) {
if (root == null) return null;
if (root.val == target) return new int[]{depth, parent == null ? Integer.MAX_VALUE : parent.val};
int[] left = helper(root.left, root, depth + 1, target);
if (left != null) return left;
int[] right = helper(root.right, root, depth + 1, target);
return right;
}
}
Last updated