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

时间:2017-11-02 23:55:37

标签: java recursion binary-search-tree comparable

所以我一直试图以递归方式向BST插入或添加节点,而且我很难过。我一直在 线程" main"中的例外情况java.lang.StackOverflowError的  我假设是由递归引起的,但我并不知道从哪里开始,如果有人能提供帮助,我会喜欢某个方向。 :)

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    

2 个答案:

答案 0 :(得分:0)

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

if (current == null) 

此条件将始终返回false(假设root不是null)。

你在“else if”中所做的事情是好的,但你应该删除第一个if部分。

其次,你需要处理rootnull的情况,最好先用一个单独的方法来检查root是否为null,只有当它是否为空时才调用此方法(addNode) )使用root和插入的节点

答案 1 :(得分:0)

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);
    }

看你是一次又一次地设置当前点等于root。这导致StackOverFlow,你不应该指向root。您可以像这样更改它:您需要删除此行:

current = root

if(root == null){
   root = newNode;
   return;
 }
相关问题