Leetcod-993-二叉树的堂兄弟节点
描述
注意:亲兄弟不符合条件!!
思路
- 所谓堂兄弟,就是指在同一层的两个非亲兄弟节点
- 采用层次遍历,维护两个变量 flagx 和 flagy
- 在同一层中若出现了 x 或 y,则把对应的值设置为true
- 若在同一层中 x 与 y 没有都出现,就都设置为false
- 最后根据 flagx && flagy 判断是否为堂兄弟
代码
class Solution {
public boolean isCousins(TreeNode root, int x, int y) {
// 创建队列
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if(root == null) return false;
boolean flagx = false;
boolean flagy = false;
queue.add(root);
// 层次遍历
while(!queue.isEmpty()){
int size = queue.size();
for(int i = 0; i < size; i++){
TreeNode node = queue.poll();
// 排除两个节点为亲兄弟的情况
if(node.left != null && node.right != null){
if((node.left.val == x && node.right.val == y) || (node.left.val == y && node.right.val == x)){
continue;
}
}
if(node.val == x) flagx = true;
if(node.val == y) flagy = true;
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
if(flagx && flagy){
return true;
}else{
flagx = false;
flagy = false;
}
}
return false;
}
}