检查二叉树中左右子节点值的和是否等于父节点的值?

3
我正在写一种方法来解决关于二叉树的作业问题。
目标:
给定一个二叉树,检查该树是否满足对于每个节点而言,其左右子节点的值之和等于该节点的值。如果一个节点只有一个子节点,则该节点的值应与该子节点的值相同。叶子节点自动满足这个属性。
我遇到了一个错误,即我的代码在某些情况下是不正确的。例如,如果我有一棵树:
15
/ \
5 10
当我的代码返回false时,它实际上应该是true。
这是我迄今为止的方法,我做错了什么?
boolean BTchecksum(BinNode root) {
    if (root == null || root.left() == null && root.right() == null) {return true;}

    BinNode leftNode = root.left();
    BinNode rightNode = root.right();

    int sum = (int)(leftNode.element()) + (int)(leftNode.element());
    int value = (int)(root.element());

    return (sum == value) && BTchecksum(root.left()) && BTchecksum(root.right());

}
3个回答

3
您将sum写成了: leftNode.element()) + (int)(leftNode.element))); 应该改为: leftNode.element()) + (int)(rightNode.element)));

发生在我们最好的时候! - Nowhere Man

1

修订(无 NullPinterException)

public boolean BTchecksum(BinNode root)
{   
    if (root == null || root.left() == null && root.right() == null) {return true;}

    int sum = 0;
    if (root.left() != null){sum = sum + root.left().value();}
    if (root.right() != null){sum = sum + root.right().value();}

    return (sum == root.value()) && BTchecksum(root.left()) && BTchecksum(root.right());
}

0

现在,你可能会收到空指针异常,因为你引用了可能为空的子元素。这可能不是最有效的解决方案,但它可以处理所有情况。

public boolean BTchecksum(BinNode root) {
    if (root == null || root.right()==null && root.left()==null) {
        return true;
    }
    if (root.right() == null) {
        return (root.left().value() == root.value()) 
            && BTchecksum(root.left());
    } else if (root.left() == null) {
        return (root.right().value() == root.value()) 
            && BTchecksum(root.right());
    } else {
        return (root.value() == root.left().value() + root.right().value()) 
            && BTchecksum(root.left()) && BTchecksum(root.right());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接