当前位置: 首页 > 知识库问答 >
问题:

删除节点二进制搜索树

拓拔烨赫
2023-03-14

目前,我在理解如何在没有传递节点时从二进制搜索树中删除节点时遇到了一个问题。我有两个类,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类中删除节点时,我不知道从何处开始。有人能告诉我吗?谢谢如果您想了解更多信息,请询问。

共有1个答案

颜乐
2023-03-14

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

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

现在,你有问题了。如果当前的\u节点。右侧有一个自己的左侧节点,那么您可能会有两个左侧节点。您将要移动当前的\u节点。正当左侧位于当前的\u节点处。左边正当然后这个问题在树的其余部分递归地重复出现,因此您需要进行相应的调整。只需确保不会因为替换节点而没有处理子节点,从而使节点更靠近叶子。

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

 类似资料:
  • 我目前正在做一个学校项目,我必须为二叉搜索树编写一些辅助函数。其中一个函数从树中删除了一个节点。我正在尝试运行一些测试用例,但似乎无法让它们正常工作。我知道这个问题与我如何使用指针有关,但我不太确定我哪里出错了。 这是代码: 注意:我没有包括leftRoot()函数,但它相当简单,我知道它做了它应该做的事情(返回子树中最左边的根)下面是我的教授给我们的测试remove函数的代码部分: 如果有必要,

  • 我正在尝试从二叉查找树中删除节点。我可以成功地删除树上的任何其他节点,除了一个特殊的情况。如果目标节点有两个子节点,左边的子节点有右边的子树,我可以定位正确的替换节点,并将值切换到目标节点,但替换节点永远不会被删除。 看看上面的图片,如果我尝试删除17,程序将正确地导航到13,并用13替换17,但它不会像预期的那样删除原来的13。 我附加了我的remove方法和其中引用的方法。 这是我的Node类

  • 我试着删除二叉查找树的节点,当我打印出来的时候,我得到的结果实际上不是这个删除,实际上可以删除二叉树本身的任何键。 我是二进制搜索树的新手。有人能帮我写代码吗?我们将感谢您的帮助。 谢谢 完整代码

  • 主要内容:src/runoob/binary/BSTRemove.java 文件代码:本小节介绍二分搜索树节点的删除之前,先介绍如何查找最小值和最大值,以及删除最小值和最大值。 以最小值为例(最大值同理): 查找最小 key 值代码逻辑,往左子节点递归查找下去: ... // 返回以node为根的二分搜索树的最小键值所在的节点 private Node minimum (Node node ) {     if ( node. left == null )         retu

  • 我正在尝试删除我的二叉查找树的根,以便我可以更新它的值,但这种方法不能做到这一点。我的想法是删除根,然后将其再次插入二叉查找树中,但使用另一个值。它适用于树中的每个节点,但不是我无法删除它的根本原因。有人知道为什么会发生这种情况吗?谢谢。 这是我调用方法删除任何节点的主代码,在这种情况下,我想删除根。

  • 我正在处理一个Path方法,它返回从给定节点到具有给定值键的节点的路径。我的代码返回正确的数字,但它们在括号内。我如何拆下支架? 实际输出为: 但它应该是: