【问题标题】:Remove the minimum value in a binary search tree删除二叉搜索树中的最小值
【发布时间】:2013-11-10 23:13:15
【问题描述】:

我了解算法,但不确定如何将其放入实际代码中。请帮忙!也请详细说明。除了复制答案之外,我真的很想了解这一点。 ;)

这是我的代码:

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

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 尝试描述 a) 您预期会发生什么 b) 实际发生了什么,以及实用程序 c) 为什么您预期 (a) 会发生。
  • 同样getLeftChild 总是返回真。它的目的是什么?

标签: java binary-search-tree remove-method


【解决方案1】:

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

仅举一个例子:

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.right)

所以现在要把它变成代码,它可能看起来像这样(不保证它真的有效)

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

你可以用deleteSmallest(root)来称呼它

【讨论】:

  • getParent() 方法是什么
  • 我不知道您的Node 类是如何实现的,但在每个节点中我至少会存储四个值。 1.父节点(根只有null) 2.左孩子 3.右孩子 4.节点的值。
  • 哦,好吧,我的 Node 类中只有左节点、右节点和值。我在我的 BST 类中创建了“节点根”。那么,代码将 node.parent.left == null?
猜你喜欢
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多