简体   繁体   English

二进制搜索树递归删除

[英]Binary Search Tree Recursive Delete

I'm working on Binary Search Trees, and currently working on recursive delete method. 我正在研究二进制搜索树,目前正在研究递归删除方法。 I have a bug in my code; 我的代码中有一个错误; it deletes nodes with no children and with one-child. 它删除没有子节点和一个子节点的节点。 Problem arises when trying to delete node with two children. 尝试删除有两个孩子的节点时出现问题。 (Point of reference - I am replacing deleted node with smallest node in Right Subtree) (参考点-我用Right Subtree中的最小节点替换了已删除的节点)

My code is: 我的代码是:

//Driver
public void delete (String val){
root = delete(root, val);
}

//Recursive Delete Method   
private static StringNode delete(StringNode node, String v){
        StringNode temp;
        if(node == null){
            return null;
        }
        if(v.compareTo(node.getString()) < 0){
            node.setLeft(delete(node.getLeft(), v));
        }
        else if(v.compareTo(node.getString()) > 0){
            node.setRight(delete(node.getRight(), v));
        }
        else{
            if(node.getLeft() == null){
                node = node.getRight();
            }
            else if(node.getRight() == null){
                node = node.getLeft();
            }
            else{
                node = node.getRight();
                while(node.getLeft() != null){
                    node = node.getLeft();
                }
                node.setRight(delete(node, node.getString()));
            }
        }
        return node;
    }

I have debugged and see that I lose a child when re-connecting the nodes after deletion. 我已经调试,看到删除后重新连接节点时我失去了一个孩子。 But I don't know how to correct in my code. 但是我不知道如何在我的代码中更正。

I figured out the bug. 我发现了这个错误。 I separated the delete method into delete and deleteNode methods. 我将delete方法分为deletedeleteNode方法。 Worked out. 解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM