我怎样才能让我的二叉树插入函数工作?
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 丢失了。
你应该做的是以下两件事之一:
传递 "this" 和 left/right 标志。
在调用者中创建left/rightsub-tree(如果为空),传递新创建和赋值的子树。
顺便说一句,在顶级方法和 set 方法中,left/right 的代码几乎相同 - 将它完全保留在 set 方法中会更容易。
/已解决/ 我实际上通过了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 丢失了。
你应该做的是以下两件事之一:
传递 "this" 和 left/right 标志。
在调用者中创建left/rightsub-tree(如果为空),传递新创建和赋值的子树。
顺便说一句,在顶级方法和 set 方法中,left/right 的代码几乎相同 - 将它完全保留在 set 方法中会更容易。