在一棵二叉树中,根节点的深度为0,每个深度k节点的子节点深度为k+1。
如果二叉树的两个节点深度相同,但父节点不同,那么它们就是表兄弟。
我们给定一个具有唯一值的二元树的根,以及树中两个不同节点的值x和y。
如果且仅当x和y值对应的节点是表亲时,返回true。
例子1.二进制树根点击查看示例
输入:根=[1,2,3,4],x=4,y=3输出:false示例2.输入:根=[1,2,3,null,4,null,5],x=5,y=4输出:true。
输入:根=[1,2,3,null,4,null,5],x=5,y=4输出:真。
->使用inorder->分别获取左右子树的深度。
public boolean isCousins(TreeNode root, int x, int y) {
int[] res = new int[5];
inorder(root.left,x,y,0,root,res);
inorder(root.right,x,y,0,root,res);
if(res[1] != res[3] && res[2] == res[4])
return true;
return false;
}
public void inorder(TreeNode node, int x, int y,int dep, TreeNode parent, int[] res){
if(node == null)
return;
dep = dep + 1;
inorder(node.left, x, y, dep, node, res);
if(node.val == x){
res[1] = parent.val;
res[2] = dep;
return;
}
else if(node.val == y){
res[3] = parent.val;
res[4] = dep;
return;
}
inorder(node.right, x ,y, dep, node, res);
}
}