java - 二叉搜索树中的递归方法-java

标签 java recursion binary-search-tree

我正在尝试编写一个 boolean 递归方法,将值插入到二叉搜索树中。如果该值尚不存在,则返回 true 并插入该值;如果已存在相同的值并且列表未更改,则返回 false。我认为这在大多数情况下都有效,但当多个值已经存在时,它无法重复返回 false。例如,如果树已经包含 3 9 6 7 并且我尝试插入 3,它会返回 false,因为这是第一次。但是当我尝试插入 9 6 或 7 时,它总是返回 true,但它不应该返回 true,因为这些值已经存在。

public boolean insert(int value) {
    Node travel;
    travel=insert(value,root);
    if (travel==null)
        return false;
    root=travel;
    return true;
}

private Node insert(int value, Node travel) {
    if (travel==null) {
        travel=new Node(value);
        return travel;  
    }
    if (value>travel.data) {
        travel.right=(insert(value,travel.right));
        return travel;
    }
    if(value<travel.data) {
        travel.left=(insert(value,travel.left));
        return travel;
    }
    return null;
}

最佳答案

像这样改变它:

private Node insert(int value, Node current) {
    if(current.data == value){
        return current;
    }else if(current.left != null && current.left.data > value){
        return insert(value,current.left);
    }else if(current.right != null && current.right.data < value){
        return insert(value,current.right);
    }else{
        if(current.data > value){
            current.left = new Node(value);
        }else{
            current.right = new Node(value);
        }
        return null;
    }
}

这将插入具有给定值的节点(如果该节点尚不存在)并返回 null。否则,将返回一个节点,表明该节点已经存在。

关于java - 二叉搜索树中的递归方法-java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654096/

相关文章:

sorting - 在java中存储递归方法的增量

algorithm - 无法理解用两个不同的输入递归调用相同的方法

c++ - 可比较类和二叉搜索树

java - 如何将 BST 中的删除方法从递归切换为迭代?

java - 无法将 java.sql.Timestamp(yyyy-MM-dd HH :mm:ss. S) 正确格式化为字符串

java - 如何同步访问 ehcache、memcached 和其他键值存储?

c - C 中 JavaScript 非递归解析器的设计(高度内存受限)

python - 元组的二分查找

java - 如何在jsp页面的html标签内放置html标签

java - 如何填充 100,000,000 个元素的数组?