将二进制树中每个节点的值增加1

时间:2017-04-12 00:41:13

标签: java

所以我想做的练习是:

写一个递归函数,将" 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时,我遇到的问题是,我得到一个空指针异常。我对这是如何发生有点困惑。是因为我试图访问空指针的左右指针?

2 个答案:

答案 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;
}