在Java中插入树

时间:2012-08-16 20:47:01

标签: java tree

在Java文件中,我有以下代码:

MyTree atree = new MyTree();
atree.insert(1);

这不是常规树。 “atree”是根节点。此树中的每个节点都有5个子节点,最初都设置为null。 insert的参数是您要“激活”的子项,即使其为非null。所以我在MyTree类中有一个方法可以做到这一点:

public void insert(int i)
{
    if(i == 1)
    {
        MyTree current = this.getChildOne();
        current = new MyTree();
    }
}

调用函数后,我检查文件中我调用它的第一个节点。

if(atree.getChildOne() == null)
{
    return -1;
}

它总是返回负面的。我怀疑插入函数实际上是在'atree'的副本而不是实际的'atree'。但我不完全确定。有人有解释吗?

2 个答案:

答案 0 :(得分:3)

看起来你不是在任何地方分配孩子。代码

MyTree current = this.getChildOne();
current = new MyTree();

不会指定一个孩子。您初始化局部变量current但是当方法结束时该变量将丢失。

我想你可能想在你的插入方法中做这样的事情

if ( i == i ) {
   this.childOne = // assign it here
}

答案 1 :(得分:0)

current = new MyTree()更改了局部变量current:它指向了this.getChildOne()指向的实例,现在它指向一个新实例。 (因此,您可以删除作业current = this.getChildOne():除非getChildOne有副作用,否则此作业毫无意义,因为您可以通过将current设置为其他内容来立即覆盖它。)

要实际修改this的某些属性,您需要编写如下内容:

if(i == 1)
{
    this.setChildOne(new MyTree());
}