【问题标题】:Deletion of the leaf node from B-tree从 B-tree 中删除叶节点
【发布时间】:2017-03-13 03:04:19
【问题描述】:

从B树的叶子节点中删除节点的规则是什么。我在下面给出了一个例子。我需要从叶节点中删除键 J、K、U。 B 树的 't' 是 3。所以一个节点中的最小键数应该是 2。

J 可以毫无问题地删除。

但是当 J 被删除时,剩下的就是 K,L。接下来删除K的时候,由于节点包含2个节点,所以不能直接删除K。

由于它的兄弟节点 N,O 也包含它的最小节点,我应该在这里执行什么?是合并吗?

如何删除 K 和 U。

请帮忙。

【问题讨论】:

  • this 有帮助吗?
  • 非常喜欢。谢谢

标签: algorithm data-structures b-tree


【解决方案1】:

我参考了 Introduction-to-algorithms-第 3 版这本书 Thomas H Cormen,他解释得很好。 以下是包含所有案例的 3 个步骤。希望对您有所帮助。

  1. 如果键 k 在节点 x 中且 x 是叶子,则从 x 中删除键 k。

  2. 如果键 k 在节点 x 中并且 x 是内部节点,则执行以下操作:

    一个。如果节点 x 中 k 之前的子 y 至少有 t 个键,则在以 y 为根的子树中找到 k 的前任 k'。递归删除k0,和 将 x 中的 k 替换为 k'。 (我们可以找到 k0 并在一个单一的向下删除它 通过。)

    b.如果 y 有少于 t 个键,那么对称地检查子 z 在节点 x 中跟随 k。如果 z 至少有 t 个键,则在以 z 为根的子树中找到 k 的后继 k'。递归删除 k' ,并将 x 中的 k 替换为 k' 。 (我们 可以找到 k' 并在一次向下传递中将其删除。)

    c。否则,如果 y 和 z 都只有 t-1 个键,则将 k 和所有 z 合并到 y 中, 因此 x 丢失了 k 和指向 z 的指针,并且 y 现在包含 2t-1 个键。 然后释放z并从y中递归删除k。

  1. 如果内部节点 x 中不存在密钥 k,则确定必须包含 k 的相应子树的根 x.ci,如果 k 完全在树中。如果 x.ci 只有 t-1 个键,则根据需要执行步骤 3a 或 3b,以保证我们下降到至少包含 t 个键的节点。然后通过递归 x 的适当子级来完成。

    一个。如果 x.ci 只有 t-1 个键,但有一个直接兄弟至少有 t 个键,通过将一个键从 x 向下移动到 x.ci 来给 x.ci 一个额外的键,移动一个 键从 x.ci 的直接左或右兄弟向上进入 x,并移动 从同级到 x.ci 的适当子指针。

    b.如果 x.ci 和 x.ci 的两个直接兄弟有 t-1 个键,则将 x.ci 与一个兄弟合并,这涉及将一个键从 x 向下移动到新的 合并节点成为该节点的中间键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2015-10-19
    相关资源
    最近更新 更多