《算法导论》笔记 第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的伪代码。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值