《算法导论》笔记 第18章 18.3 从B树中删除关键字

【笔记】

1) 如果关键字k在结点x中而且x是个叶结点,则从x中删除k。

2) 如果关键字k在结点x中而且x是个内结点,则作如下操作。

a) 如果结点x中前于k的子结点y包含至少t个关键字,则找出k在以y为根的子树中的前驱k‘。递归的删除k’,并在x中用k’取代k。

b) 对称的,如果结点x中位于k之后的子结点z包含至少t个关键字,则找出k在以z为根的子树中的后继k‘。递归的删除k’,并在x中用k‘取代k。

c) 否则,如果y和z都只有t-1个关键字,则将k和z中所有关键字合并进y,使得x失去k和指向z的指针,这使y包含2t-1个关键字。然后,通过对x的某个合适的子结点递归而结束。

3) 如果关键字k不在结点x中,则确定必包含k的正确地子树的根c_i[x]。如果c_i[x]只有t-1个关键字,执行步骤3a或3b以保证我们降至一个包含至少t个关键字的结点。然后,通过对x的某个合适的子结点递归而结束。

a) 如果c_i[x]只包含t-1个关键字,但它的一个相邻兄弟包含至少t个关键字,则将x中的某一个关键字降至c_i[x]中,将c_i[x]的相邻左兄弟或右兄弟的某一关键字升至x,将该兄弟中合适的子女指针移到c_i[x]中,这样使得c_i[x]增加一个额外的关键字。

b) 如果c_i[x]以及c_i[x]的所有相邻兄弟都包含t-1个关键字,则将c_i[x]与一个兄弟合并,即将x的一个关键字移至新合并的结点,使之成为该结点的中间关键字。

【练习】

18.3-1 请说明按顺序从图中删除C,P和V后的结果。

18.3-2 请写出B-TREE-DELETE的伪代码。

    原文作者:B树
    原文地址: https://blog.csdn.net/cyendra/article/details/24736075
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞