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

数据结构【DS】B树

m阶B树的核心特性:

Q:根节点的子树数范围是多少?关键字数的范围是多少?

A:根节点的子树数∈[2, m],关键字数∈[1, m-1]。

Q:其他结点的子树数范围是多少?关键字数范围是多少?

Q:对任一结点,其所有子树高度有什么特点?

  • 都相同

Q:关键字的值的大小关系是什么样的?

  • 关键字的值:类比二叉查找树:左<中<右

 

Q:含 n 个关键字的 m 阶 B 树,最小高度、最大高度是多少?

  • 最小高度:
  • 最大高度:
    • 让各层的分叉尽可能的少

Q:对于高度为 2 的 5 阶 B 树所含关键字的个数最少是多少?

A:根结点只有达到 5 个关键字时才能产生分裂, 成为高度为 2 的 B 树 ,因此高度为 2 的 5 阶 B 树所含关键字的个数最少是 5 。

B树的插入和删除

插入

  • 通过“查找”确定插入位置(一定是在终端结点插入)
  • 若插入后结点关键字个数未超过上限,则无需做其他处理
  • 若插入后关键字个数超过上限,则需要将当前结点的中间元素放到父节点中,当前结点分裂为两个部分;
  • 该操作会导致父节点关键字个数+1,若父节点关键字个数也超过了上限,则需要再向上分裂;根节点的分裂会导致B树高度+1。

Q:B树裂开的时候从哪开始裂?

删除

  • 非终端结
    • 用其直接前驱或直接后继替代其位置,转化为对“终端结点”的删除点关键字.
    • 直接前驱:当前关键字左边指针所指子树中最右下的元素
    • 直接后继:当前关键字右边指针所指子树中最左下的元素
    • 删除后结点关键字个数未低于下限,无需任何处理
  • 终端结点
    • 右兄弟够借,则用当前结点的后继、后继的后继依次顶替空缺
    • 左兄弟够借,则用当前结点的前驱、前驱的前驱依次顶替空缺
    • 左(右)兄弟都不够借,则需要与父结点内的关键字、左(右)兄弟进行合并。合并后导致父节点关键字数量-1,可能需要继续合并。

相关文章:

  • Postman如何导出接口的几种方法?
  • Ubuntu Studio 23.10发布
  • 【开源】基于SpringBoot的天然气工程运维系统的设计和实现
  • NlogPrismWPF
  • Vue+ElementUI项目打包部署到Ubuntu服务器中
  • 苹果cms模板MXone V10.7魔改版源码 全开源
  • 如何公网远程访问本地WebSocket服务端
  • SQL中使用ROLLUP和CUBE函数轻松生成汇总行
  • MySQL - 为什么索引结构默认使用B+树,而不是其他?
  • 薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特
  • CentOS 编译安装 nginx
  • 亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路
  • Java集合类--List集合,Set集合,Map集合
  • 【理论知识:Window Aggregation】flink 窗口聚合功能概述:两种窗口聚合模式的使用例子、功能说明
  • 【JVM】字节码文件的组成部分
  • [译]前端离线指南(上)
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular 4.x 动态创建组件
  • centos安装java运行环境jdk+tomcat
  • Java Agent 学习笔记
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • laravel 用artisan创建自己的模板
  • Swift 中的尾递归和蹦床
  • uni-app项目数字滚动
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • VUE es6技巧写法(持续更新中~~~)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Yii源码解读-服务定位器(Service Locator)
  • 关于使用markdown的方法(引自CSDN教程)
  • 类orAPI - 收藏集 - 掘金
  • 七牛云假注销小指南
  • 前端技术周刊 2019-02-11 Serverless
  • 前端面试总结(at, md)
  • 人脸识别最新开发经验demo
  • 日剧·日综资源集合(建议收藏)
  • 深入浅出Node.js
  • 我的业余项目总结
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Hibernate主键生成策略及选择
  • raise 与 raise ... from 的区别
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (function(){})()的分步解析
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET : 在VS2008中计算代码度量值
  • .NET Micro Framework初体验
  • .Net mvc总结
  • .NET 常见的偏门问题
  • .NET 设计一套高性能的弱事件机制