Java中的二叉树

时间:2013-09-19 03:30:06

标签: java binary-tree

我正在尝试编写自己的二叉树。虽然我可以找到很多二叉搜索树的例子,但我决定自己写一下。

到目前为止,我已经达到了这个目标:

public class bTree {
bnode root=null;

void add(int val){
    bnode newnode= new bnode(val);
    bnode curr = this.root;
    bnode parent = null;

    if(this.root == null){
        this.root = newnode;
        System.out.println("Inserted at root \t"+newnode.value);
    }
    else{
            while( curr != null){
            System.out.println("Current Left and Right\t"+curr.left+"\t"+curr.right);

            if(curr.left == null){
                curr =  curr.left;
                curr = newnode;
                System.out.println("Inserted Left\t" +newnode.value);
                return;
            }
            if(curr.right ==  null){
                curr =  curr.right;
                curr = newnode;
                System.out.println("Inserted Right\t" +newnode.value);
                return;
            }
        }
    }
}

当我尝试将值添加到二叉树时,只有root才能添加值。我正在慢慢地尝试编写剩下的代码,它发现左边的孩子已经完整并且回溯了所有的情况。我的问题是为什么它甚至没有向最左边的孩子添加下一个值(在第二次调用它时)。如果你不给我代码,我想要学习,我真的很感激。

3 个答案:

答案 0 :(得分:3)

在你的陈述中:

        if(curr.left == null){
            curr =  curr.left;
            curr = newnode;
            ...
        }

当您进行作业“curr = curr.left”时,“curr”会被指定为null,并且不再引用树中的任何内容。因此树将引用它,您需要将“curr”的左侧链接分配给新节点

        if(curr.left == null){
            curr.left = newnode;
            ...
        }

这是一张显示两者之间差异的图片: enter image description here

答案 1 :(得分:2)

  

为什么在第二次调用中,它甚至没有向最左边的孩子添加下一个值?

因为这不会将curr.left分配给newnode

curr = curr.left;
curr = newnode;

修正:

curr = curr.left = newnode;

请注意,您的代码中还有其他错误。你会通过更多的电话找到它们。

答案 2 :(得分:1)

因为当你输入别的时候{} curr总是!= null(因为curr = root和root!= null),所以循环永远不会执行