首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我怎样才能让我的二叉树插入函数工作?

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

Stack Overflow用户
提问于 2019-05-09 05:34:39
回答 1查看 54关注 0票数 0

/ Solved /我实际上传递了null。因为它不包含任何信息,所以向它添加值不会影响我的树,谢谢你的回答!

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

我的类由一个整数"value“和左、右分支的两个引用" left”和" right“组成。另外,我必须以这种方式编写这个函数,所以它们必须返回void,我知道还有更简单的方法。

所以,现在,我已经知道我已经到达了叶子。那么它就是t == null。当我尝试的时候,然后把"t = new CONSTRUCTOR(value,...)“这不会改变任何事情。

代码语言:javascript
复制
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”函数是一样的,我只是在调用它时传递了正确的子树)函数的代码:

代码语言:javascript
复制
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“的引用,这样做应该不会有任何问题,有人能发现错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-09 06:00:57

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

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

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

你应该做的是两件事中的一件:

  1. 传递"this“和左/右标志。
  2. 创建左/右子树(如果为空)在调用方中,传递新创建并分配的子树。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56049363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档