如何在java中检查二元树中两个节点是否是表兄弟?

问题描述 投票:-1回答:1

在一棵二叉树中,根节点的深度为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输出:真。

java data-structures binary-tree binary-search-tree array-algorithms
1个回答
0
投票

->使用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);
}

}

© www.soinside.com 2019 - 2024. All rights reserved.