二叉搜索树

时间:2014-05-22 11:32:43

标签: java data-structures

我创建了BinarySearch Tree,我在插入键和值时遇到问题。 它说NullPointerException。

package BST;

public class Tree 
{
    public Node root = null;

    public void insert(int key, Object obj)
    {
        Entry entry = new Entry(key,obj);
        if(this.root==null)
        {
            this.root = new Node(entry, null);
        }
        else
        {
            insert(entry,this.root); //error
        }
    }
    public void insert(Entry entry, Node temp)
    {
        if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error
        {
            if(temp.isLeft())
                insert(entry, temp.childLeft());
            else
                temp.addLeft(entry);
        }
        else
        {
            if(temp.isRight())
                insert(entry, temp.childRight());
            else
                temp.addRight(entry);
        }
    }//insert

    public void inorderT()
    {
        inorderT(this.root);
    }
    private void inorderT(Node t)
    {
        if(t.isLeft())
            this.inorderT(t.childLeft());
        ((Entry)t.getObj()).printEntry();
        if(t.isRight())
            this.inorderT(t.childRight());
    }

    public void find(int key)
    {
        System.out.println("키 값이" + key + " 인 엔트리 출력하기");
        find(key,root);
    }
    private void find(int key, Node temp)
    {
        Entry entry = ((Entry)temp.getObj());

        if(entry.getKey()==key)
        {
            entry.printEntry();
            return;
        }
        if(temp.isLeaf())
        {
            System.out.println("찾기 실패");
            return;
        }

        if(entry.getKey()==key)
        {
            find(key, temp.childLeft());
        }
        else
        {
            find(key, temp.childRight());
        }
    }
}

说错误的句子 是我的问题。 我完全不知道为什么它不起作用 顺便说一句,我是Java语言的新手。所以,如果这是一个愚蠢的问题,请不要责备我:)

2 个答案:

答案 0 :(得分:0)

替换

if(((Entry) temp.getObj()).getKey() > entry.getKey()) //error

if( temp.getObj())!=null && temp.getObj()).getKey()!=null && ((Entry) temp.getObj()).getKey() > entry.getKey()) //solution

答案 1 :(得分:0)

方法 public void insert(int key,Object obj)如果root为null,则表示正在创建

    this.root = new Node(entry, null);

然后如果你将this.root传递给 public void insert(Entry entry,Node temp),你可能会遇到标记为错误的行中的NullPointerException,因为 temp.getObj() 返回null,然后你试图在null对象上调用 getKey()