为什么该方法不起作用?

why the method doesnt work?

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

我不明白为什么它不这样做以及我哪里错了。

root 随时保持为空。

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



 }

问题来自:

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

假设这是 BTree class 的方法并且您将 root 初始化为 null,当您调用:

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

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

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

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

问题是根节点是按值而不是按引用传递给 add 方法的。 Java 按值而不是按引用传递对象。查看下面的 link 以进一步解释 Is Java "pass-by-reference" or "pass-by-value"?

修改你代码的add方法如下

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