在这里,我们将了解如何在 B 树中执行节点的删除操作。假设我们有一个如下所示的 B 树:B 树示例 - 删除操作分为两个部分。首先,我们需要找到要删除的元素。这个策略类似于查询操作。现在,对于删除操作,我们需要注意一些规则。一个节点必须至少包含 m/2 个元素。因此,如果我们删除一个元素,并且剩余元素少于 m-1 个,则它将进行自我调整。如果整个节点都被删除,则其子节点将被合并,如果其大小与 m 相同,则将其拆分... 阅读更多
在这里,我们将了解什么是区间堆。区间堆是完全二叉树,其中除最后一个节点外,每个节点都包含两个元素。假设节点 P 中两个元素的优先级分别为 'a' 和 'b'。这里我们考虑 a ≤ b。我们说节点 P 表示闭区间 [a, b]。这里 a 是 P 区间的左端点,b 是右端点。[c, d] 包含在区间 [a, b] 中当且仅当 a ≤ c ≤ d ≤ b。在一个... 阅读更多
在这里,我们将了解不同的最大加权左倾树操作。HBLT 具有不同的操作,如插入、删除和初始化。它们与 WBLT 也非常相似。但是,合并操作可以在单个自上而下的遍历中完成。WBLT 可以进行单次遍历合并操作。因为我们可以在向下遍历的过程中找到 w 值。我们可以更新 w 值并根据需要交换子树。对于 HBLT,我们无法在向下遍历树的过程中找到 s 值。由于合并可以在单个自上而下的遍历中完成,则插入和删除... 阅读更多
在这里,我们将了解左倾树的另一种变体。在这里,我们将考虑子树中的节点数量,而不是从根节点到外部节点的最短路径的长度。在这里,我们将定义节点 x 的权重 w(x),作为以 x 为根的子树中的内部节点的数量。如果 x 是外部节点,则权重为 0。如果 x 是内部节点,则权重比其子节点权重之和多 1。这是一个加权左倾树 (WBLT) 的示例:假设二叉树是... 阅读更多
从最大或最小 HBLT 中删除任意节点不是优先队列或 HBLT 的标准操作。如果我们想从 HBLT 中删除一个节点,例如 K,我们需要遵循以下规则。将以 K 为根的子树从树中分离,并用 K 节点子树的合并结果替换它。更新从 K 到根节点的路径上的 s 值,并根据需要交换此路径上的子树以保持 HBLT 的属性。要更新从 K 到根节点的 s 值,我们需要每个节点的父节点指针。此操作用于更新 s... 阅读更多
合并策略很容易使用递归来完成。假设 A 和 B 是两个将要合并的 HBLT。如果其中一个为空,则只需将另一个作为最终结果。如果没有空 HBLT,则我们需要比较两个根节点中的元素。具有较大元素的根节点将成为合并后的 HBLT 的根节点。假设 A 具有较大的根节点。并且它的左子树是 L。假设 C 是合并 A 的右子树和 HBLT B 的结果的最大 HBLT。最终的 HBLT 将以 A 作为根节点,... 阅读更多