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

删除BST中的最大元素

武琛
2023-03-14

下面的一些代码似乎太明显了,使用最右边的分支遍历树,因为这是所有最大值所在的位置。然而,我在RobertSedgewick的算法书中看到的这段代码有一些地方我不太懂。

     public void deleteMax() {
     if (isEmpty()) throw new NoSuchElementException("");
     root = deleteMax(root);
     assert check();
     }

    private Node deleteMax(Node x) {
    if (x.right == null) return x.left;
    x.right = deleteMax(x.right);
    x.size = size(x.left) + size(x.right) + 1;
    return x;
    }

在私有方法中,如果x的右子元素为null,为什么要返回左元素?根据我的理解,如果x没有正确的子节点,并且是我们可以访问的最正确的节点,那么x将是最大值。另外,我不明白什么时候在第二个方法的最后一行返回x。

共有1个答案

何华灿
2023-03-14

如果x没有正确的子节点,那么x是最大节点。我们通过返回x.left(新的最大节点)来“删除”它。我们在修改了它的右子树后返回x

 类似资料:
  • 本文向大家介绍从数据结构中的最大HBLT中删除最大元素,包括了从数据结构中的最大HBLT中删除最大元素的使用技巧和注意事项,需要的朋友参考一下 在Max HBLT中,将根放在根上。如果根被删除,则两个最大的HBLT(即左和右)将分开。通过再次将这两个Max HBLT融合在一起,我们可以将它们合并为一个。因此,在融合之后,所有元素都将存在,除了已删除的元素。

  • 假设我有一个二元搜索树,其中我应该按照标准输入中给定的顺序插入N个唯一编号的键,然后我要删除所有键间隔为I=[最小,最大]的节点,以及与这些节点相邻的所有连接。这给了我很多较小的树,我要以一种特殊的方式将它们合并在一起。更精确地描述问题: 给定包含不同键的BST和间隔I,间隔删除分两个阶段进行。在第一阶段,它将删除关键帧位于I中的所有节点以及与已删除节点相邻的所有边。让生成的图包含k个连通分量T1

  • 本文向大家介绍从数据结构中的最大HBLT中删除任意元素,包括了从数据结构中的最大HBLT中删除任意元素的使用技巧和注意事项,需要的朋友参考一下 从“最大”或“最小” HBLT中删除任意节点不是标准操作。优先队列或HBLT。如果要从HBLT中删除一个节点,例如K,则必须遵循以下规则。 从树上分离以K为根的子树,并将其替换为节点K子树的融合体。 从K到根的路径更新s的值,并根据需要交换此路径上的子树以

  • 问题内容: 我有一个python程序,它将打开一个新窗口以显示一些“关于”信息。该窗口有其自己的关闭按钮,而我已使其不可调整大小。但是,最大化和最小化按钮仍然存在,我希望它们消失。 我正在使用Tkinter,包装所有信息以显示在Tk类中。 到目前为止的代码如下。我知道它不是很漂亮,我打算将信息扩展到一个类中,但是我想在继续之前解决这个问题。 任何人都知道如何管理Windows管理器显示哪些默认按钮

  • 当我通过GPS移除一个节点时,当我试图打印二叉树时,会出现堆栈溢出。下面是我的一些代码。我不能理解它将如何工作良好,如果我删除的名称,但不是,如果我删除的坐标,因为我正在使用相同的删除方法。 我得到的确切错误是“Exe:0xC00000FD中0x013214D6处的未处理异常:堆栈溢出(参数:0x00000001,0x00152FFC)”。在按坐标删除后,在打印函数中会出现这种情况,但如果按名称删

  • 本文向大家介绍在Python中删除频率最高为K的元素,包括了在Python中删除频率最高为K的元素的使用技巧和注意事项,需要的朋友参考一下 在处理列表中的数据时,我们可能会遇到这样的情况:我们根据元素的出现频率有选择地从列表中删除元素。在本文中,我们将探讨如何从频率小于等于2的列表中删除所有元素。您还可以在程序中将值2更改为任何数字。 带数 count方法将列表中每个元素的计数保留。因此,我们将其