In a binary tree, the root node is at depth
0
, and children of each depthk
node are at depthk+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 valuesx
andy
of two different nodes in the tree.Return
true
if and only if the nodes corresponding to the valuesx
andy
are cousins.
Example 1:
Input: root = [1,2,3,4], x = 4, y = 3 Output: falseExample 2:
Input: root = [1,2,3,null,4,null,5], x = 5, y = 4 Output: trueExample 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
and100
.- Each node has a unique integer value from
1
to100
.
public boolean isCousins(TreeNode root, int x, int y) {
Map<Integer, TreeNode> parent = new HashMap<>();
//traversal by layer
Queue<TreeNode> queue = new LinkedList<>();
parent.put(root.val, null);
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode peek = queue.poll();
System.out.println(peek.val + " ");
if (peek.left != null) {
queue.offer(peek.left);
parent.put(peek.left.val, peek);
}
if (peek.right != null) {
queue.offer(peek.right);
parent.put(peek.right.val, peek);
}
}
TreeNode parentX = parent.get(x);
TreeNode parentY = parent.get(y);
int depthX = 0, depthY = 0;
int val = x;
while (parent.get(val) != null) {
depthX++;
val = parent.get(val).val;
}
val = y;
while (parent.get(val) != null) {
depthY++;
val = parent.get(val).val;
}
return (parentX != parentY) && (depthX == depthY);
}