用java构造二叉树

用java构造二叉树,java,nullpointerexception,Java,Nullpointerexception,我正在尝试用java实现二叉树 这是我的二叉树实现代码。我遇到一个错误,请帮助: 给你 public static class Binarytree{ Node root; public Binarytree(){ } public void addnode(int data){ Node newnode = new Node(data); if(root==null)

我正在尝试用java实现二叉树 这是我的二叉树实现代码。我遇到一个错误,请帮助: 给你

public static class Binarytree{
        Node root;
        public Binarytree(){

        }
        public void addnode(int data){
            Node newnode = new Node(data);
            if(root==null)
                root = newnode;
            else
            {
                Node coming = root;
                while(true){
                    if(data<coming.data)
                    {   coming = coming.left;
                    if(coming==null)
                    {   coming.left = newnode;
                        return;
                    }
                    }
                    else{
                        coming = coming.right;
                        if(coming==null)
                        {   coming.right = newnode; // Error
                           return;
                        }
                    }
                }
            }
        }

    }
    public static class Node{
        int data;
        Node left;
        Node right=null;

        Node(int data){
        this.data = data;}
    }

    public  static void main(String[] args) {


           Binarytree so = new Binarytree();
           so.addnode(2);
           so.addnode(42);  // Error
           so.addnode(22);
           so.addnode(12);
           so.addnode(21);
           so.addnode(20);
}
inline coming.right=newnode;
我不知道怎么了。请帮助

问题出在这段代码中:

if(coming == null)
{
    coming.right = newnode;
    return;
}
如果对象引用coming为null,则不能引用coming.right,因为null引用不指向实际对象。如果没有实际对象,则不能引用对象字段,如right。如果您试图使用空的引用或指针执行某些操作,那么Java将抛出一个NullPointerException,正如您在本例中看到的那样

您需要做的是创建一个实际的节点对象,并将其分配给即将到来的引用,然后您将能够在即将到来的时候引用该对象的右字段。右

请注意,您将遇到与以ifcoming==null开头的第一个块完全相同的错误,因为它在coming为null时尝试引用coming.left。

coming为null。只有当coming为null时,才执行该行,尝试访问null对象的属性会导致问题如果coming为null,则您已检查无法访问此变量的属性。
if(coming == null)
{
    coming.right = newnode;
    return;
}