【问题标题】:Delete a node Binary Search tree删除节点二叉搜索树
【发布时间】:2014-10-12 22:06:38
【问题描述】:

当我没有被传递一个节点时,我目前在理解如何从二叉搜索树中删除一个节点时遇到问题。我有 2 个类,BSTSet 和 BSTNode,每个类都有一个 remove 方法..

public class BSTSet <E extends Comparable<E>> extends AbstractSet <E> {

  // the root of the supporting binary search tree
  private BSTNode<E> root;

  // number of elements in the set
  private int count = 0;


  public boolean remove(E item) {
     if(root == null) return false;
     else return root.remove(item);
  }
}


 public class BSTNode <E extends Comparable<E>> {

   private E value;
   private BSTNode<E> left;
   public BSTNode<E> right;

   public BSTNode<E>remove(E item) {
      //The code i'm confused about
   }

 }

当我被传递一个节点时,我了解删除方法,但是当我在根上调用 remove 方法并尝试从 Node 类中删除节点时,我不知道从哪里开始。有人可以启发我吗?谢谢。如果您想了解更多信息,请询问。

【问题讨论】:

    标签: java binary-search-tree


    【解决方案1】:

    我觉得这是一个学校作业(因为二叉搜索树的使用几乎不存在学校后),所以我会解释,但我不会包含任何代码。

    当您从树中删除一个元素时,您希望从 BSTNode.right 进行一些提升。您要删除的节点的右子节点是将取代已删除节点的节点。您没有包含有关添加的代码,但我假设右侧大于根节点,左侧小于根节点。这意味着如果你移除当前节点,你想要提升下一个最近的节点,也就是右边。

    现在,您遇到了问题。如果 current_node.right 有一个自己的左节点,那么您可能会有两个左节点。您需要将 current_node.right.left 移动到 current_node.left.right 的位置。然后这个问题在树的其余部分递归地重复,所以你需要相应地调整。只需确保您不会进一步丢失节点,因为您正在替换节点而不处理子节点。

    如果有不清楚的地方,或者您有其他问题,请告诉我。正如我所说,我不介意帮助你,但我想每个人都同意我们不想为你写作业,所以我不会包含特定于这个问题的代码来为你解决它......对不起:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      相关资源
      最近更新 更多