从B树中的叶节点删除节点的规则是什么。我在下面给出了一个例子。我需要从叶节点中删除键,J,K,U。 B树的't'是3.所以节点中的最小键数应为2.
J可以毫无问题地删除。
但是当J被删除时,其余的将是K,L。删除K时,由于节点包含2个节点,因此无法直接删除K.
由于它的兄弟节点N,O也包含其最小节点,我应该在这里执行什么?这是合并吗?
如何删除K和U.
请帮忙。
答案 0 :(得分:2)
我通过 算法简介 - 第3版 > Thomas H Cormen ,他解释得非常好。 以下是包含所有案例的3个步骤。希望它有所帮助。
如果密钥k在节点x中且x是叶子,则从x中删除密钥k。
如果密钥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。