CMU15445 B+树 删除

删除流程:

1、若是空树,立刻返回

2、不是空树,找到要删除的key的位置

(1)直接删除掉key,不需要其他操作,结束

(2)删除掉key后,该叶子节点的size小于min_size,兄弟节点有空位,需要和兄弟节点合并

(3)删除掉key后,该叶子节点的size小于min_size,兄弟节点没有空位,需要和兄弟节点合并之后进行再分配。

合并和分配也会涉及到父节点的变动,父节点也可能会面临合并和分配的问题,需要递归调用。

 CoalesceOrRedistribute函数会判断key删除后该节点是否需要合并和分配,若不需要则是情况1。

 

 注意:我的实现中删除掉了10,根节点并没有变化,依然有10,这在书中也有提到,是允许的。

 关键函数: CoalesceOrRedistribute

Redistribute:

先找兄弟节点,根据node在父节点中对应的key是在最左边还是其他情况。

若是最左边,则兄弟节点在右边,将兄弟的头移动到node的尾。

若是其余节点,兄弟节点在左边,将兄弟的尾移到node的头。

注意node已经删除掉了目标key,若触发合并或分配现在的size必为minsize-1,兄弟节点给它一个kv就行,就能保证node的size为minsize。

接着更新一下父节点的索引。

 Coalescs:

执行一个将当前节点全移动到兄弟节点上,并把父节点指向当前节点的kv删除。

注意还是要分节点在最左边和其他位置讨论,因为涉及到父节点更新的key不一样。

递归向上

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值