如何使二叉树插入功能正常工作?

时间:2019-05-08 21:34:39

标签: java binary-tree

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

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

我的课程包括一个整数“值”和左右两个分支的两个引用“左”和“右”。 另外,我必须以这种方式编写此函数,因此它们必须返回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”的引用,因此这样做应该没有问题,有人可以发现错误吗?

1 个答案:

答案 0 :(得分:0)

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

如果您传递了一个对象(例如“ this”),它将把引用传递给该对象(实际上,Java是“ Pass by value”,但是按值传递的是引用,而不是对象本身)及其任何更改都会反映在功能之外。

传递null不会这样做,因为没有对象引用,而您只是传递的值“ null”与原始对象没有任何关系,因此在第二个函数内对“ t”所做的任何更改都是迷路了。

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

  1. 传递“ this”和左/右标志。

  2. 在调用方中创建左/右子树(如果为空),则传递新创建并分配的子树。

顺便说一下,顶层方法和set方法中的左/右代码几乎相同-将其完全保留在set方法中会更容易。