簡體   English   中英

搜索樹中的遞歸方法-java

[英]recursion method in binary search tree-java

我正在嘗試編寫將值插入二進制搜索樹的布爾型遞歸方法。 如果該值尚不存在,則返回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;
    }
}

如果節點不存在,則將插入具有給定值的Node並返回null。 否則,將返回一個節點,指示該節點已經存在。

我認為可能是這樣

最初使用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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM