当前位置: 首页 > news >正文

B树的插入与删除过程

B树的插入

原树:
请添加图片描述
插入key后,若导致原节点关键字数超过上限,则从中间位置( ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m)将关键字分成两部分,左部分包含的关键字放在原节点中,右部分包含的关键字放到新节点中,中间位置( ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m)的节点插入原节点的父节点
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
若此时导致其父节点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根节点为止,进而导致B树高度+1
请添加图片描述
请添加图片描述
请添加图片描述

B树的删除

若被删除关键字在终端节点,则直接删除该关键字;若在非终端节点,则用直接前驱或直接后继来替代被删除的关键字
(直接前驱:当前关键字左侧指针所指子树中最右下的元素;直接后继:当前关键字右侧指针所指子树中最左下的元素)
请添加图片描述
请添加图片描述

若被删除关键字所在节点删除后的关键字个数低于下限,则需要与其右(或左)兄弟借,需要调整该节点的兄弟节点与双亲节点。比如下图当右兄弟很宽裕时,用当前节点的后继、后继的后继来填补空缺
请添加图片描述请添加图片描述

请添加图片描述

下图示例为当左兄弟很宽裕时,用当前节点的前驱、前驱的前驱来填补空缺
请添加图片描述

请添加图片描述请添加图片描述

当兄弟不够借时,将关键字删除后与左(或右)兄弟节点及双亲节点中的关键字进行合并。
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
如上,在合并过程中,双亲节点中的关键字个数会-1,若其双亲节点是根节点且关键字个数减少到0,则直接删除根节点,合并后的新节点成为根。若双亲节点不是根节点,且关键字个数减少到 ⌈ m 2 ⌉ − 2 \lceil\frac{m}{2}\rceil-2 2m2,则又要与它自己的兄弟节点进行调整和合并操作,并重复上述步骤,直至符合B树要求

http://www.lryc.cn/news/116757.html

相关文章:

  • 【二分】CF1623 C
  • redis五大类型分析--list(1)
  • 【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)
  • 【Express.js】集成Websocket
  • MachineLearningWu_14/P65-P69_Multiclass
  • 深入理解高并发编程 - SimpleDateFormat 类的线程安全问题
  • 接口幂等性实现方式
  • redis高可用之持久化
  • Cocos Creator 3.8 后期效果 Shader 编写(2/2) 进阶篇
  • 【JS自用模板】自动点击选课的操作模板
  • TENNECO EDI 项目——X12与XML之间的转换
  • C++项目:在线五子棋对战(网页版)
  • flutter遇到的小问题记录
  • Golang bitset 基本使用
  • sql 分组讨论,二级分组(非2个字段分组),使用 窗口函数和普通分组实现
  • 业务中如何过滤敏感词
  • 用服务器搭建网站需要做什么
  • clickhouse 删除操作
  • C 语言中,「.」与「->」有什么区别?
  • github pages 用法详解 发布自己的网站
  • 坤简炫酷的JQuery轮播图插件
  • C# 条件编译
  • IntelliJ IDEA如何重新弹出git身份验证窗口
  • 【雕爷学编程】Arduino动手做(200)---WS2812B幻彩LED灯带4
  • 【雕爷学编程】Arduino动手做(201)---DFRobot 行空板03
  • Spring中Bean的“一生”(生命周期)
  • 安卓:LitePal操作数据库
  • 【JavaEE初阶】了解JVM
  • 基于vue2.0和elementUi的vue农历日期组件vue-jlunar-datepicker(插件)
  • Python爬虫——selenium_元素定位