题目来源:
leetcode题目,网址:993. 二叉树的堂兄弟节点 - 力扣(LeetCode)
解题思路:
广度优先遍历二叉树,判断深度及父节点是否相同。
解题代码:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isCousins(TreeNode root, int x, int y) {if(root.val==x || root.val==y) //根节点一定无堂兄弟节点return false;Queue<TreeNode> queue=new LinkedList<>();queue.offer(root.left);queue.offer(root.right);int flagX=-1;int flagY=-1;while(!queue.isEmpty()){int size=queue.size();for(int i=0;i<size;i++){TreeNode thisNode=queue.poll();if(thisNode==null){continue;}if(thisNode.val==x)flagX=i;else if(thisNode.val==y)flagY=i;else{queue.offer(thisNode.left);queue.offer(thisNode.right); }}if(flagX!=-1|| flagY!=-1){break;}}if(flagX ==-1|| flagY==-1){return false;}return !(flagX/2==flagY/2);}}
总结:
官方题解将两个都找到了,但广度优先时某些情况下只需找到一个即可。另外我在向队列中添加节点时,节点个数只能为 0 个或 2 个,这样可以利用与 2 之商判断父节点是否相同。