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

时间:2014-10-30 13:19:24

标签: java recursion binary-search-tree

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

2 个答案:

答案 0 :(得分:1)

像这样改变:

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。否则,将返回一个节点,表明节点已经存在。

答案 1 :(得分:0)

我认为它可能像

最初使用insert(value, root, null)

进行通话
public boolean insert(int value, Node currentNode, Node parentNode) {
    if(currentNode == null) { //Node not present, hence insert
         Node valueNode = new Node(value);
         if(parentNode != null && parentNode.value > value) { //link to the parent node
             parentNode.left = valueNode;
         } else if(parentNode != null && parentNode.value < value){
             parentNode.right = valueNode;
         }
         return true; 
    } else if(currentNode.value = value) { //Node present 
         return false;
    } else if(value > currentNode.value) { //Now check the same in right side of the tree
         return insert(value, currentNode.right, currentNode);
    } else if(value < currentNode.value) { //Now check the left side of the tree
         return insert(value, currentNode.left, currentNode);
    }
}