最近考完数字逻辑有点飘了,玩的时间有点多,又要开始忙着项目的事,所以又鸽了几天,罪过罪过~~以后尽量不鸽(不是)。
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。
输入:root = [1,2,3,4], x = 4, y = 3
输出:false
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:true
输入:root = [1,2,3,null,4], x = 2, y = 3
输出:false
这个问题是个简单题,这里我们只需要遍历树的每一个节点,找到我们的x和y即可,记录他们的深度和其父节点,如果深度相等,父节点不同,我们就返回true,否则就返回false即可
/**
* @Description: 力扣993题题解
* @return: 返回结果
* @Author: Mr.Gao
* @Date: 2021/5/17
*/
int X_temp;//记录x的值
int Y_temp;//记录y的值
int X_deep;//记录x的深度
int Y_deep;//记录y的深度
int X_pro;//记录x的父节点
int Y_pro;//记录y的父节点
public boolean isCousins(TreeNode root, int x, int y) {
//初始化
X_temp = x;
Y_temp = y;
X_deep = -1;
Y_deep = -1;
//从root,0,-1开始遍历,root是根节点,0表示第0层,-1表示根节点的父节点不存在。
f(root,0,-1);
//返回结果
return X_deep==Y_deep&&X_deep!=-1&&Y_deep!=-1&&X_pro!=Y_pro;
}
public void f(TreeNode root,int deep,int pro){
if(root==null){
return;
}
if(root.val==X_temp){
X_deep = deep;
X_pro = pro;
}
if(root.val==Y_temp){
Y_deep = deep;
Y_pro = pro;
}
f(root.left,deep+1,root.val);
f(root.right,deep+1,root.val);
}