我以下列方式插入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相同的东西,因为我等同于它们?我在这里缺少什么?
答案 0 :(得分:3)
tempRoot
是一个局部变量,因此当您为其分配新节点时,现有树中没有任何内容引用它。新节点应链接到其父节点(通过left
或right
引用)。
目前,您的代码只能正确插入第一个节点,因为该节点成为根节点。
建议的更正(未经测试):
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;
}
}
}
}