B+ tree 删除算法

本文详细介绍了B+树的删除算法,强调了只能从叶子节点删除的特点,并分为三次循环的三种不同情形进行讨论。文章通过实例展示了删除过程,包括各种情况下的节点调整,如向左右兄弟节点借元素和合并节点等操作。
摘要由CSDN通过智能技术生成
MD
B+ 树有两种定义,一是严蔚敏老师的数据结构一书的定义,二是维基百科的定义,本文采用维基百科的定义并实现。

https://en.wikipedia.org/wiki/B%2B_tree
前提知识:掌握B-tree ,了解B+插入算法及流程。

1.算法描述

与B-tree不同,B+tree只能从叶子删除,从叶子删除元素分为三次循环的三种情形:

  • 第一次循环,如果满足条件结束,否则:
  • 第二次循环,如果满足条件结束,否则:
  • 第三次循环,如满足条件线束,否则继续调用第三次循环。

第一次循环的三种情形:


     情形1:
若x->keynum>Min,则只需删去K及其右指针(*x是叶子)即可使,父节点的索引元素也要重新调整,
     如果K还出现在非父索引节点中,取K的后继元素代替之,删除操作结束。


    情形2:
若x->keynum=Min,如左或右兄弟Keynum>Min,借一个填充K,如果K同时作为非父节点的索引元素,用新的K位置上的值并取代其索引元素;
        如果因此父节点的索引被打乱,则索引元素重新取该元素对应的孩子的最小元素。如果该节点是索引节点,孩子一同过继。
     情形3:
若x->keynum=Min,  第一步:左或右合并,删除本元素,
     剩下的元素和孩子过继给左或右兄弟,删除节点,叶子链接调整。

     第二步:进行第2次递归调用干掉父元素。递归调用步骤:
              删除本元素,剩下的元素和孩子过继给左兄弟

第二次循环的三种情形:

   情形一:只需删去K,移位,调整索引,但不需要用后继元素做替换
   情形二:如左或右兄弟Keynum>Min,借一个填充K,如果K同时作为非父节点的索引元素,取后继元素取代之,
   父节点相应元素的顺序可能被打破,需要取该位置后继元素取代之。删除结束。
   情形三:
     左合并:删除本元素,剩下的元素和孩子过继给左兄弟。如果它的孩子是叶子,
     调整索引(哪个索引有变动重排哪个,不必全部重排)递归调用删除父元素。
     右合并;与左合并一样.

第三次循环的三种情形:

    与B-树步骤一样,省略。

2. 举例子

插入:
char r[21] = {‘C’, ‘N’, ‘G’, ‘A’, ‘H’, ‘E’, ‘K’, ‘Q’, ‘M’, ‘F’, ‘W’, ‘L’, ‘T’, ‘Z’, ‘D’, ‘P’, ‘R’, ‘X’, ‘Y’, ‘S’,’B’};
这里写图片描述
Min= (max_degree+1)/2-1;
Max=max_degree-1;
约定:
本例m=5阶。
S3=situation 3=情形3
S2=situation 2=情形2
S1=situation 1=情形1
S2-right = 情形2,向右兄弟借一个元素
S2-left = 情形2,向左兄弟借一个元素
S3-right -> S2-right ,S3 第一次右合并,第二次情形2的右兄弟借元素
S1 delete A :

delete : A
第 1 层, 1 node : K2 层, 2 node : D G 
      第 3 层, 2 node : B C3 层, 3 node : D E F 
      第 3 层, 2 node : G H 
   第 2 层, 4 node : N Q T X 
      第 3 层, 3 node : K L M 
      第 3 层, 2 node : N P 
      第 3 层, 3 node : Q R S 
      第 3 层, 2 node : T W 
      第 3 层, 3 node : X Y Z 

S2-right delete AB

delete : A
第 1 层, 1 node : K2 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值