如何检查 java 中二叉树中的两个节点是否是表亲?
How to check if two nodes are cousins in binary tree in java?
在二叉树中,根节点在深度0,每个深度k节点的子节点在深度k+1。
二叉树的两个节点如果具有相同的深度但具有不同的父节点,则它们是表亲。
我们得到了具有唯一值的二叉树的根,以及树中两个不同节点的值 x 和 y。
Return 当且仅当对应于值 x 和 y 的节点是表亲时才为真。
示例 1:
click for example
输入:root = [1,2,3,4], x = 4, y = 3
输出:错误
示例 2:
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:真
->使用顺序
->分别获取左右子树的深度
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);
}
}
在二叉树中,根节点在深度0,每个深度k节点的子节点在深度k+1。
二叉树的两个节点如果具有相同的深度但具有不同的父节点,则它们是表亲。
我们得到了具有唯一值的二叉树的根,以及树中两个不同节点的值 x 和 y。
Return 当且仅当对应于值 x 和 y 的节点是表亲时才为真。
示例 1: click for example
输入:root = [1,2,3,4], x = 4, y = 3 输出:错误 示例 2:
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4 输出:真
->使用顺序 ->分别获取左右子树的深度
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);
}
}