202-5-17 力扣每日一题

993 二叉树的堂兄弟节点

最近考完数字逻辑有点飘了,玩的时间有点多,又要开始忙着项目的事,所以又鸽了几天,罪过罪过~~以后尽量不鸽(不是)。

问题描述

​ 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。

示例1:

202-5-17 力扣每日一题_第1张图片

输入:root = [1,2,3,4], x = 4, y = 3
输出:false

示例2:

202-5-17 力扣每日一题_第2张图片

输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:true

示例3:

202-5-17 力扣每日一题_第3张图片

输入:root = [1,2,3,null,4], x = 2, y = 3
输出:false

思路:

​ 这个问题是个简单题,这里我们只需要遍历树的每一个节点,找到我们的x和y即可,记录他们的深度和其父节点,如果深度相等,父节点不同,我们就返回true,否则就返回false即可

Java代码:

/** 
* @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);
}

你可能感兴趣的:(力扣题解,二叉树,java,数据结构,算法,leetcode)