Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除二进制搜索树中的最小值_Java_Binary Search Tree_Remove Method - Fatal编程技术网

Java 删除二进制搜索树中的最小值

Java 删除二进制搜索树中的最小值,java,binary-search-tree,remove-method,Java,Binary Search Tree,Remove Method,我理解算法,但我不知道如何将其转化为实际代码。请帮忙!并请详细解释。除了抄下答案之外,我真的很想了解这一点 这是我的密码: public boolean getLeftChild(){ Node insertNode = root; while(insertNode!=null){ insertNode = insertNode.left; } return true; } public Boolean removeMin(){ Node

我理解算法,但我不知道如何将其转化为实际代码。请帮忙!并请详细解释。除了抄下答案之外,我真的很想了解这一点

这是我的密码:

 public boolean getLeftChild(){
    Node insertNode = root;
    while(insertNode!=null){
        insertNode = insertNode.left;
    }
    return true;
}
public Boolean removeMin(){
    Node insertNode = root;
    Node parentNode =root;

        if (insertNode.left ==null){
            insertNode.right = parentNode;
            insertNode = null;

        }else if (getLeftChild() ==true && insertNode.right != null){
            insertNode.left = null;
        }else{
            parentNode.left = insertNode.right;

    }
        return true;
}

第一件事:对于树,我强烈推荐递归

举个例子:

getSmallestNode(Node node){
     if(node.left != null){
         return getSmallestNode(node.left)
     }

     return node;
}
对于删除,如果要删除二叉树中最小的(因此也是“最左边的叶子”子树),可以有两种情况

案例1:叶没有子节点,在这种情况下,只需将父节点中的相应条目设置为null(
mostLeftChild.getParent().left=null

案例2:叶有一个右子节点(不能有左子节点,因为这意味着会有一个较小的节点,而您当前选择的节点不是最小的),在这种情况下,您将用右子树的最小节点替换当前的左节点
mostLeftChild.getParent().left=getSmallestFromSubtree(mostLeftChild.右)

因此,现在要将其转化为代码,它可能看起来像这样(不能保证它真的有效)


你可以用
deleteminate(root)

1)来调用它。要更快地获得更好的帮助,请发布一个。2) 尝试描述a)您预期会发生什么b)实际发生了什么,以及实用程序c)您预期(a)发生的原因。另外
getLeftChild
始终返回true。它的用途是什么?getParent()方法是什么?我不知道你的
节点
类是如何实现的,但在每个节点中,我至少会存储四个值。1.父节点(仅根节点为空)2。左撇子3。正确的孩子4。节点的值。哦,好的,只有左节点、右节点和我的节点类中的值。我在我的BST类中创建了“节点根”。那么,代码node.parent.left==null?
public Node deleteSmallest(Node node){
    // haven't reached leaf yet
    if(node.left != null{
        return deleteSmallest(node.left)
    }

    // case 1, no child nodes
    if(node.right == null){
        node.getParent().left = null;
    } else { // case 2, right child node
        node.getParent().left = deleteSmallest(node.right)
    }

    return node;
}