上文https://www.jb51.net/article/154157.htm我们介绍了B-树的插入过程,本文我们来介绍B-树的删除过程。

在B-树中删除节点时,可能会发生向兄弟节点借元素,和孩子节点交换元素,甚至节点合并的过程。

我们以下面的树为基础,进行删除操作。

首先明确一下这个树的定义。它是一个5阶树。所以,每个节点内元素个数为2~4个。

我们依次删除8、16、15、4这4个元素。

首先删除8,因为删除8后,不破坏树的性质,所以直接删除即可。得到如下

然后删除16,这导致该节点只剩下一个13节点,不满足节点内元素个数为2~4个的要求了。所以需要调整。这里可以向孩子借节点,把17提升上来即可,得到下图。这里不能和兄弟节点借节点,因为从3,6节点中把6借走后,剩下的3也不满要求了。另外,也不能把孩子中的15提升上来,那样会导致剩下的14不满足要求。

然后删除15,删除15后同样需要调整。调整的方式是,18上升,17下降到原来15的位置,得到下图。

然后删除元素4,删除4后该节点只剩下5,需要调整。可是它的兄弟节点也都没有多余的节点可借,所以需要进行节点合并。节点合并时,方式会有多种,我们选择其中的一种即可。这里,我们选择父节点中的3下沉,和1,2,以及5进行合并,如下图。

但这次调整,导致6不符合要求了。另外,6非根节点,但只有2个孩子,也不符合要求。需要继续调整。调整的方式是,将10下沉,和6,以及13,18合并为根节点,如下图。

结束。

总结

更多相关文章

  1. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  2. Android(安卓)Chromium WebView html js 开发系列
  3. Android(安卓)Calendar使用过程中遇到的问题
  4. CyanogenMod 编译 Google Galaxy Nexus (GSM) 全过程
  5. Android(安卓)启动过程
  6. Android(安卓)启动过程(2)
  7. android 多媒体扫描过程(Android(安卓)Media Scanner Process)
  8. [置顶] Android加载数据过程中的菊花显示
  9. Android的启动过程

随机推荐

  1. TP5.0 PHPExcel 数据表格导出导入
  2. PHP识别相片是否是颠倒的,并且重新摆正相
  3. 避坑!用 Docker 搞定 PHP 开发环境搭建
  4. php开发常见问题总结
  5. PHP中的进制转换
  6. PHP中关于trait使用方法的详细介绍
  7. PHP 代码优化 技巧总结
  8. php魔术常量教程
  9. PHP:微信支付服务商开发相关的那点事
  10. 使用PHP自建稳定可靠的守护程序