插入二进制搜索树

时间:2016-01-15 08:36:00

标签: java tree

我以下列方式插入BST:

private void BSTinsert(int toInsert){
        if(root==null){
            root = new Node(toInsert);
            return;
        }
        Node tempRoot = root;
        while(tempRoot!=null){
            if(tempRoot.data > toInsert){
                tempRoot = tempRoot.left;
            }else{
                tempRoot = tempRoot.right;
            }
        }
        tempRoot = new Node(toInsert);
}

但是当我尝试从root打印树时,它会抛出一个Null Pointer Exception。但是当我尝试打印tempRoot时,插入它正确打印出来,但是根本没有root和tempRoot相同的东西,因为我等同于它们?我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

tempRoot是一个局部变量,因此当您为其分配新节点时,现有树中没有任何内容引用它。新节点应链接到其父节点(通过leftright引用)。

目前,您的代码只能正确插入第一个节点,因为该节点成为根节点。

建议的更正(未经测试):

private void BSTinsert(int toInsert){
    if(root==null){
        root = new Node(toInsert);
        return;
    }
    Node tempRoot = root;
    while(tempRoot!=null){
        if(tempRoot.data > toInsert){
            if (tempRoot.left == null) {
                tempRoot.left = new Node(toInsert);
                return;
            } else {
                tempRoot = tempRoot.left;
            }
        }else{
            if (tempRoot.right == null) {
                tempRoot.right = new Node(toInsert);
                return;
            } else {
                tempRoot = tempRoot.right;
            }
        }
    }
}