993. 二叉树的堂兄弟节点
这题的难点在于怎么判断查询到的2个节点没有同一个父节点,因此我们每次遍历的
时候,就记录下当前节点的左右子节点,然后对下一层做判断,这样每一层遍历的时候
就能得出下一层的结果
时间O(n),空间O(n)
1 public boolean isCousins(TreeNode root, int x, int y) { 2 Deque<TreeNode> queue = new LinkedList<TreeNode>(); 3 queue.add(root); 4 while(!queue.isEmpty()){ 5 int size=queue.size(); 6 boolean flag1 = false; 7 boolean flag2 = false; 8 TreeNode p1 = null; 9 TreeNode p2 = null; 10 while(size-->0){ 11 TreeNode temp = queue.poll(); 12 if(temp.left!=null){ 13 queue.add(temp.left); 14 if(temp.left.val==x){ 15 flag1=true; 16 p1=temp; 17 } 18 if(temp.left.val==y){ 19 flag2=true; 20 p2=temp; 21 } 22 } 23 if(temp.right!=null){ 24 queue.add(temp.right); 25 if(temp.right.val==x){ 26 flag1=true; 27 p1=temp; 28 } 29 if(temp.right.val==y){ 30 flag2=true; 31 p2=temp; 32 } 33 } 34 } 35 // 存在x和y的情况下,需要确认这两个节点不在同一个父节点下 36 if(flag1 && flag2){ 37 return p1!=p2; 38 } 39 } 40 return false; 41 }
争取早日不再是一只菜鸡