从B树中删除叶节点

时间:2016-10-31 00:55:33

标签: algorithm data-structures b-tree

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

J可以毫无问题地删除。

但是当J被删除时,其余的将是K,L。删除K时,由于节点包含2个节点,因此无法直接删除K.

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

如何删除K和U.

请帮忙。

enter image description here

1 个答案:

答案 0 :(得分:2)

我通过 算法简介 - 第3版 > Thomas H Cormen ,他解释得非常好。 以下是包含所有案例的3个步骤。希望它有所帮助。

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

  2. 如果密钥k在节点x中且x是内部节点,请执行以下操作:

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

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

    ℃。否则,如果y和z都只有t-1个键,则将k和z的全部合并为y, 这样x失去了k和指向z的指针,y现在包含2t-1个键。 然后释放z并递归删除y中的k。

  3. enter image description here

    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。

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

    2. enter image description here