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;
}