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