Java中的二叉树

Java中的二叉树,java,binary-tree,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.r

我正在尝试编写我自己的二叉树。虽然我可以找到许多二叉搜索树的例子,但我决定自己写这篇文章

到目前为止,我已经得出以下结论:

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;
            }
        }
    }
}

当我尝试向二叉树添加值时,只有根才能添加值。我正在慢慢地尝试编写代码的其余部分,它会发现左边的子对象是满的、回溯的以及所有的情况。我的问题是,为什么它甚至不向最左边的子级添加下一个值(在对它的第二次调用中)。如果您不给我代码,我会非常感激,我想学习。

因为当您输入其他代码时,{}curr总是!=null(因为curr=root和root!=null),所以循环永远不会执行,因为当您输入else时,{}curr总是!=null(因为curr=root和root!=null),所以循环永远不会执行

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

因为这不会将
当前左侧
分配给
新节点

curr = curr.left;
curr = newnode;
修正:

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

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

因为这不会将
当前左侧
分配给
新节点

curr = curr.left;
curr = newnode;
修正:


请注意,代码中还有其他错误。您将通过更多的电话了解他们。

在您的陈述中:

        if(curr.left == null){
            curr =  curr.left;
            curr = newnode;
            ...
        }
当您将赋值“curr=curr.left”时,“curr”将被赋值为null,并且不再引用树中的任何内容。为了让树引用它,您需要将“curr”的左链接分配给新节点

        if(curr.left == null){
            curr.left = newnode;
            ...
        }
下面的图片显示了两者之间的区别:

在您的陈述中:

        if(curr.left == null){
            curr =  curr.left;
            curr = newnode;
            ...
        }
当您将赋值“curr=curr.left”时,“curr”将被赋值为null,并且不再引用树中的任何内容。为了让树引用它,您需要将“curr”的左链接分配给新节点

        if(curr.left == null){
            curr.left = newnode;
            ...
        }
下面的图片显示了两者之间的区别:

好的。但我不想让它进入infi循环。那么我还能怎么阻止它呢?最简单的解决方法是使用递归。如果你环顾四周几乎任何一棵树,你会发现递归是正确的。但我不想让它进入infi循环。那么我还能怎么阻止它呢?最简单的解决方法是使用递归。如果你环顾四周几乎任何一棵树,你都会看到递归