这个题既然堂兄弟节点在同一层,就可以利用层序遍历来锁定一层,然后目的是找到这两个节点的父节点,如果找到两个节点且父节点不是同一个则返回true。如果都没找到则下一层。如果一层找到一个,则肯定不在一层,返回false。
import java.util.LinkedList;
class Solution {
public boolean isCousins(TreeNode root, int x, int y) {
if(root==null ||x==root.val || y==root.val)return false;
Queue<TreeNode> q=new LinkedList<TreeNode>();
q.offer(root);
TreeNode xnode=null;
TreeNode ynode=null;
TreeNode xfnode=null;
TreeNode yfnode=null;
while(!q.isEmpty()){
int size=q.size();
for(int i=0;i<size;i++){
TreeNode n=q.poll();
if(n.left!=null){
q.offer(n.left);
if(n.left.val==x){
xnode=n.left;
xfnode=n;
}
if(n.left.val==y){
ynode=n.left;
yfnode=n;
}
}
if(n.right!=null){
q.offer(n.right);
if(n.right.val==x){
xnode=n.right;
xfnode=n;
}
if(n.right.val==y){
ynode=n.right;
yfnode=n;
}
}
if(xnode!=null && ynode!=null){
return xfnode!=yfnode;
}
if(i==size-1 &&(xnode!=null || ynode!=null)){
return false;
}
}
}
return false;
}
}