我怎样才能让我的二叉树插入函数工作?

How can I get my binary tree insert function to work?

/已解决/ 我实际上通过了null。由于它不包含任何信息,因此为其添加值不会影响我的树,感谢您的回答!

我们在 Java 中有一项任务是创建一个可以容纳整数的二叉树。我们必须编写一个插入函数,它巧合地将一个整数插入到树中。我现在已经编写了函数,但不知何故它没有添加我输入的值。

我的class由一个整数"value"和左右分支的两个引用组成,"left"和"right"。 另外,我必须这样写这个函数,所以他们必须 return void,我知道有更简单的方法。

所以,现在,我已经知道我到了叶子。然后它是 t == null。当我尝试时,然后输入 "t = new CONSTRUCTOR(value, ...)" 它不会改变任何东西。

public void insert_in_tree(int i) {
    /*Creating random number*/
    Random rand = new Random();
    int rand_num = rand.nextInt(2);
    if(rand_num == 0) { 
        setLeft(this.left, i);
    } else {
        setRight(this.right, i);
    }
}

...这里是"setLeft"的代码("setRight"函数是一样的,我只是在调用它的时候传递右子树)函数:

void setLeft(IntBinTree t, int value) {
    if(t == null) {
        t = new IntBinTree(value, null, null);
        return;
    }
    int i = 0;
    /*Random number*/
    Random rand = new Random();
    int rand_num = rand.nextInt(2);
    /*Calling either left or right*/
    if(rand_num == 0) setLeft(t.left, value);
    setRight(t.right, value);
}

我想,错误是调用函数然后更改局部变量 "t" 而不是使用 "this"。但是,由于我传递的是 "this" 的引用,这样做应该没有任何问题,有人能发现错误吗?

您正在将 null 传递给函数。不是对象。

如果你传递一个对象(例如"this"),它会传递对该对象的引用(实际上,Java是“Pass by value”,但你传递的是value 是引用,而不是对象本身)并且对它的任何更改都会反映在函数之外。

传递 null 不会那样做,因为没有对象引用,您只是传递一个与原始对象无关的 "null" 值,因此对 "t" 的任何更改第二个函数中的 made 丢失了。

你应该做的是以下两件事之一:

  1. 传递 "this" 和 left/right 标志。

  2. 在调用者中创建left/rightsub-tree(如果为空),传递新创建和赋值的子树。

顺便说一句,在顶级方法和 set 方法中,left/right 的代码几乎相同 - 将它完全保留在 set 方法中会更容易。