所以我想做的练习是:
写一个递归函数,将" root"指向的二叉树中的每个节点的值递增1。然后返回修改后的树。假设节点存储整数值。 (-1表示NULL指针)
我到目前为止的代码是:
public BinNode BTinc(BinNode root)
{
if (root.right == null && root.left == null){
root.setValue(root.value() + 1);
return root;
}
if (root.left != null) {
root.left.setValue(root.left.value() + 1);
return BTinc(root.left);
}
if (root.right != null) {
root.right.setValue(root.right.value() + 1);
return BTinc(root.right);
}
return root;
}
到目前为止,当传入的根是-1时,我遇到的问题是,我得到一个空指针异常。我对这是如何发生有点困惑。是因为我试图访问空指针的左右指针?
答案 0 :(得分:1)
我得到一个空指针异常。我对如何有点困惑 这种情况正在发生
你不能只执行root.setValue(root.value() + 1);
,因为如果根是null
会怎样?
在执行root
之前,您需要检查root.setValue
是否等于null。
if (root != null && root.right == null && root.left == null){ // if both left and right nodes are null then simply return root
root.setValue(root.value() + 1);
return root;
}
然后由您为根设置适当的值。
答案 1 :(得分:0)
其实不需要检查左右节点是否为空,效率低下。 “您无需查看子代来决定是否进行递归调用。” 只需访问根并添加值,然后让递归调用来完成剩下的工作。
public BinNode BTinc(BinNode root){
if (root != null) {
root.setValue(root.value() + 1);
BTinc (root.left());
BTinc (root.right());
}
return root;
}