B树的插入和删除

一颗m阶的B树定义如下:

1)Math.ceil(m/2)-1<=非根结点关键字个数<=m-1。

2)根结点最少可以只有1个关键字。

3)所有叶子结点都位于同一层。

 

B树插入操作:

1)根据要插入的key的值,找到叶子结点并插入。

2)判断当前结点key的个数是否<=m-1,若满足则插入操作完成;否则进行第3步。

3)以结点中间的key为中心分裂成左右两部分,然后将这个中间的key插入到父结点中,这个key的左指针指向分裂后的左半部分,这个key的右指针指向分裂后的右半部分,循环进行第2步、第3步。

 

B树删除操作:

1)如果当前需要删除的key位于非叶子结点上,则用后继key(大于key)覆盖要删除的key,然后在后继key所在的结点中删除该后继key。然后执行第2步。

2)已经删除后继key的结点的key个数>=Math.ceil(m/2)-1(也就是m阶B树结点关键字个数最小要求),结束删除操作;否则执行第3步(结点关键字个数不满足B树要求了)。

3)如果兄弟结点key个数大>Math.ceil(m/2)-1,则父结点中的key下移到该结点,兄弟结点中的一个key上移,删除操作结束。

如果兄弟结点关键字个数刚好=Math.ceil(m/2)-1,将父结点中的key下移与当前结点及它的兄弟结点中的key合并,形成一个新的结点。原父结点中的key的两个孩子指针就变成了一个指针,指向这个新结点。循环进行第2步、第3步。

有些结点它可能即有左兄弟,又有右兄弟,那么我们任意选择一个兄弟结点进行操作即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值