LeetCode每日一题-2021/05/17-二叉树的堂兄弟节点

二叉树的堂兄弟节点-java(DFS)

题目如下:

求两个节点是否为堂兄弟节点,只需要两个节点的深度(即depth)相等并且父节点不是同一个即可(为了方便,只需要父节点的值不相等
也就是说满足堂兄弟节点的条件就是:

  1. 两个节点的深度相等
  2. 父节点的值不相等

主要思路:

前序遍历整棵树,维护每个节点的深度和父节点,将x、y的深度和父节点的值保存起来。树的遍历完成后,判断值为x、y的节点是否为堂兄弟节点即可。

代码如下:

/**
 * 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 {
    private int xDepth,yDepth;
    private int xParentVal,yParentVal;
    public boolean isCousins(TreeNode root, int x, int y) {
        recursion(root,0,x,y);
        return xDepth == yDepth && xParentVal != yParentVal;
    }

    public void recursion(TreeNode root,int depth, int x, int y){
        int val = root.val;
        if( val == x ){
            xDepth = depth;
        }else if( val == y ){
            yDepth = depth;
        }
        if( root.left != null ){
            int leftVal = root.left.val;
            if( leftVal == x ){
                xParentVal = val;
            }else if( leftVal == y ){
                yParentVal = val;
            }
            recursion(root.left,depth + 1, x, y);
        }
        if( root.right != null ){
            int rightVal = root.right.val;
            if( rightVal == x ){
                xParentVal = val;
            }else if( rightVal == y ){
                yParentVal = val;
            }
            recursion(root.right,depth + 1, x, y);
        }
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值