为什么这个方法不起作用?

时间:2015-03-15 21:06:42

标签: java binary-tree

此方法假设将节点添加到二叉树。

我不明白为什么它没有这样做以及我有错误的地方。

root随时都会保持为null。

 public void add(int num)
        {
            add(num, root);
        }

        private void add(int num, Node t)
        {

            if (t == null)
                t = new Node(num);

            else if (t.getLeftSon() == null)
                t.setLeftSon(new Node (num));



 }

2 个答案:

答案 0 :(得分:1)

问题来自:

private void add(int num, Node t)
{
    if (t == null)
        t = new Node(num);
    //...
 }

假设这是BTree课程的方法,并且您将root初始化为null,请致电:

add(1, root);
方法退出时,

root将不包含新创建的节点。你可以这样做:

public void add(int num)
{
    if (root == null) {
        root = new Node(num);
    }
    else {
        add(num, root);
    }
}

并删除if (t == null)方法中的add(int num, Node t)

答案 1 :(得分:1)

问题是根节点是按值而不是通过引用传递给add方法的。 Java按值传递对象,而不是按引用传递。请查看以下链接以获取进一步说明 Is Java "pass-by-reference" or "pass-by-value"?

修改代码的添加方法,如下所示

public void add(int num) {
    root = add(num, root);
}

private Node add(int num, Node t) {
    if (t == null)
        return t = new Node(num);
    else if (t.getLeftSon() == null)
        t.setLeftSon(new Node(num));
    else if (t.getRightSon() == null)
        t.setRightSon(new Node(num));
    else if (Math.abs(height(t.getLeftSon()) - height(t.getRightSon())) <= 1)
        t.setLeftSon(add(num, t.getLeftSon()));
    else
         t.setRightSon(add(num, t.getRightSon()));
    return t;
}