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

grumpyalien:

我正在用通用类在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++;
}

当我运行测试类时,就会发生问题。在那里,第一个节点被添加并成为根节点,但是无论其值是多少,之后的下一个插入都会引发异常。它的行为就像我要添加的值已经存在于树中。如果我注释掉该异常,则测试类不会编译,就好像它在运行无限循环一样。

我在这里做错了什么?

LeffeBrune:

在while循环中电流将如何变为空?

即使插入新元素,您也不会从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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章