使用 Java 中的可比较递归地向 BST 添加节点

Adding a Node to a BST recursively using comparable in Java

所以我一直在尝试以递归方式向 BST 插入或添加节点,但我被难住了。我不断得到 线程异常 "main" java.lang.WhosebugError 我假设这是由递归引起的,但我不知道从这里去哪里,如果有人能提供帮助,我会喜欢一些方向。 :)

public void add(Type obj) {

    TreeNode<Type> newNode = new TreeNode<Type>(obj);

    if (root == null) {
        root = newNode;
    } else {
        addNode(root, newNode);
    }
}


private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {

    current = root;
    if (current == null) {
        current = newNode;
    } else if (newNode.getValue().compareTo(current.getValue()) < 0) {

        if (current.getLeft() == null) {
            current.setLeft(newNode);

        } else {
            addNode(current.getLeft(), newNode);
        }
    } else if (newNode.getValue().compareTo(current.getValue()) > 0) {

        if (current.getRight() == null) {
            current.setRight(newNode);
        } else {
            addNode(current.getRight(), newNode);
        }
    }
}//end add    

首先,您要分配 current = root;,然后在下一行检查:

if (current == null) 

这个条件总是 return 假(假设 root 不是 null)。

您在 "else if" 中所做的很好,但您应该删除第一个 if 部分。

其次,您需要处理 rootnull 的情况,最好在一个单独的方法中执行此操作,该方法首先检查 root 是否为 null,仅当它不是时才调用此方法(addNode) with root 和插入的节点

private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {

current = root;
if (current == null) {
    current = newNode;
} else if (newNode.getValue().compareTo(current.getValue()) < 0) {

    if (current.getLeft() == null) {
        current.setLeft(newNode);

    } else {
        addNode(current.getLeft(), newNode);
    }

看你一次又一次将当前点设置为根。这会导致 Whosebug,您不应指向 root。您可以这样更改它:您需要删除此行:

current = root

if(root == null){
   root = newNode;
   return;
 }