删除节点二进制搜索树

时间:2014-10-12 22:06:39

标签: java binary-search-tree

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

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
   }

 }

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

1 个答案:

答案 0 :(得分:0)

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

当您从树中删除元素时,您希望从BSTNode.right中进行一些促销。要删除的节点的右子节点将取代已删除节点的节点。您还没有包含有关添加的代码,但我假设权利大于根节点,而左侧小于根节点。这意味着如果删除当前节点,则需要提升下一个最接近的节点,这是正确的。

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

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