題目地址:
https://leetcode.com/problems/cousins-in-binary-tree/
給定一棵二叉樹,其值兩兩不同。再給定兩個數和,問這兩個數對應的節點是否是cousin。cousin的意思是處於同一深度但父親節點不同。
可以用BFS,在將某個節點左右孩子入隊時判斷一下是否是和。如果是則直接返回false,否則將這一行的數全加入一個哈希表,如果某行已經含有兩數了則返回true。代碼如下:
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
public class Solution {
public boolean isCousins(TreeNode root, int x, int y) {
if (root == null || root.val == x || root.val == y) {
return false;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
Set<Integer> set = new HashSet<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
if (cur.left != null && cur.right != null) {
if ((cur.left.val == x && cur.right.val == y) || (cur.left.val == y && cur.right.val == x)) {
return false;
}
}
if (cur.left != null) {
queue.offer(cur.left);
set.add(cur.left.val);
}
if (cur.right != null) {
queue.offer(cur.right);
set.add(cur.right.val);
}
if (set.contains(x) && set.contains(y)) {
return true;
}
}
}
return false;
}
}
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
時空複雜度。