通用二叉搜索树未正确添加新节点 (Java)



我正在用java编写一个带有泛型类的二进制搜索树,但节点添加不正确,我不知道为什么。

这是我的插入方法(迭代(:

public void insert (E element){
//iterative insert element to tree
Node<E> node = new Node<>(element); //create new node for element
Node<E> current = root;
if (root == null) root = node; // if no root, new node is the root
else {
while (current != null){ //traverse tree to get to correct parent node
if (element.compareTo(current.data) < 0) { //case 1: node is smaller than current
if (current.left == null){ 
node.parent = current;
current.left = node;
}
else {
current = current.left;
}
}
else if (element.compareTo(current.data) > 0) { //case 2: node is larger than current
if (current.right == null){
node.parent = current;
current.right = node;
}
else {
current = current.right;
}
}
else { //case 3: node already exists
throw new RuntimeException("Node already exists");
}
}
}
size++;
}

这个问题发生在我运行测试类的时候。第一个节点被添加并成为根节点,但之后的下一个插入无论值是什么都会抛出异常。这就像我试图添加的值已经存在于树中一样。如果我注释掉异常,测试类就不会编译,就好像它在运行一个无限循环一样。

我在这里做错了什么?

在while循环中,current怎么会变成null?

即使插入新元素,也不会从while循环中脱离:

if (current.left == null) { 
node.parent = current;
current.left = node;
}

在下一次迭代中,您将current分配给刚刚插入current.left:的值

} else {
current = current.left;
}

但是在下一次迭代中,current.data等于element,这导致了异常。插入元素后添加break;

if (current.left == null) { 
node.parent = current;
current.left = node;
break;
}

最新更新