Java 在二叉树中检查左、右子代值之和是否等于父代值?

Java 在二叉树中检查左、右子代值之和是否等于父代值?,java,recursion,methods,binary-tree,Java,Recursion,Methods,Binary Tree,我正在写一个关于二叉树的家庭作业的方法 目标: 给定一棵二叉树,检查该树是否满足以下属性:对于每个节点,其左、右子节点的值之和等于该节点的值。如果节点只有一个子节点,则该节点应具有与该子节点相同的值。叶节点自动满足该属性 我得到一个错误,我的代码不是所有情况下都正确。例如,如果我有一棵树 15 /\ 5 10 当它应该是真的时候,我返回了假 这是我到目前为止的方法,我做错了什么 boolean BTchecksum(BinNode root) { if (root == null ||

我正在写一个关于二叉树的家庭作业的方法

目标:
给定一棵二叉树,检查该树是否满足以下属性:对于每个节点,其左、右子节点的值之和等于该节点的值。如果节点只有一个子节点,则该节点应具有与该子节点相同的值。叶节点自动满足该属性

我得到一个错误,我的代码不是所有情况下都正确。例如,如果我有一棵树

15
/\
5 10

当它应该是真的时候,我返回了假

这是我到目前为止的方法,我做错了什么

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());

}
你写的总数是:
leftNode.element())+(int)(leftNode.element))

应该是这样的:
leftNode.element())+(int)(rightNode.element))

现在,您可能会遇到空指针异常,因为您引用的子项可能为空。这可能不是最有效的解决方案,但它解决了所有情况

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());
}
修订(无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());
}