在java中构造二叉树

时间:2014-09-14 19:58:35

标签: java nullpointerexception

我正在尝试在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);
}

我收到错误:

Exception in thread "main" java.lang.NullPointerException

coming.right = newnode;行中 我不知道什么是错的。
请帮忙

1 个答案:

答案 0 :(得分:2)

问题在于这段代码:

if(coming == null)
{
    coming.right = newnode;
    return;
}

如果对象引用comingnull,则您无法引用coming.right,因为null引用未指向实际对象。如果没有实际对象,则无法引用right等对象字段。如果您尝试使用null的引用(或指针)执行某些操作,那么Java将在您的情况下抛出NullPointerException

您需要做的是创建一个实际的Node对象并将其分配给引用coming,然后您将能够引用该对象的字段right coming .right

请注意,开始if(coming == null)的第一个块会引发完全相同的错误,因为当coming.leftcoming时,它会尝试引用null