01

知识框架

02

知识点详解

1

B树

①定义与性质

B树也叫B-树。B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件:

01

每个结点最多只有m-1个关键字。

02

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

03

非根结点至少有m/2个关键字。

04

每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。

根结点的关键字数量范围为[1,m-1];非根结点的关键字数量范围为[m/2,m-1];

②B树的插入

在进行B树的插入时,根据上面提到的B树的性质,我们可以总结出一条准则:在向B树插入结点时,先判断当前结点关键字的个数是否小于等于m-1,如果满足,直接插入即可,如果不满足,将结点的中间的关键字将这个结点分为左右两部分,中间的结点放到父结点中即可。下面我们来看具体的例子:Q:向一颗5阶B树中插入关键字A:5阶B树中,每个结点最多有4个关键字,最少有2个关键字(根结点除外)。

01

插入15,30,45,60

02

插入19,此时该结点的关键字个数大于,需进行分裂

03

插入20,25,28

左边结点的关键字数大于4,分裂

③B树的删除

B树的插入比插入稍复杂些,只要牢记B树应该满足的条件,就能够解题。下面我们来看一个B树删除关键字的例子:

01

删除19,19所在结点所剩关键字个数大于2,则可以直接删除

02

删除30,30不是叶子结点,不能直接删除。这种情况的规则:30是非叶子结点,对于非叶子结点的删除,我们需要用后继的关键字覆盖要删除的关键字,然后在后继关键字所在的分支中删除该关键字。对于删除30,需要将后继元素32移到被删除的30所在的结点。

此时发现35所在的结点只有一个关键字,小于2个,这时候的规则是(向兄弟结点借元素):如果删除叶子结点,如果删除元素后元素个数少于(m/2),并且它的兄弟结点的元素大于(m/2),也就是说兄弟结点的元素比最少值m/2还多,将先将父结点的元素移到该结点,然后将兄弟结点的元素再移动到父结点。

03

删除40,删除后不满足B树要求。需要考虑向兄弟结点借元素,但兄弟结点也没有多的结点(2个),借不了。若遇到这样的情况,还是将先将父结点的元素移到该结点,然后,将当前结点及它的兄弟结点中的关键字合并,形成一个新的结点。

再与兄弟结点合并

2

B+树

①定义与性质

B树与B+树有很多相似之处:

01

根结点所含关键字范围:1 <= k <= m-1

02

非根结点所含关键字范围:m/2 <= k <= m-1

不同点:

01

B+树有两种类型的结点:内部结点(也称索引结点)和叶子结点。内部结点就是非叶子结点,内部结点不存储数据,只存储索引,数据都存储在叶子结点。

02

内部结点中的关键字都按照从小到大的顺序排列,对于内部结点中的一个关键字,左树中的所有关键字都小于它,右子树中的关键字都大于等于它。叶子结点中的记录也按照关键字的大小排列。

03

每个叶子结点都存有相邻叶子结点的指针,叶子结点本身依关键字的大小自小而大顺序链接。

04

父结点存有右孩子的第一个元素的索引。

下面我们来看一颗B+树,感受一下它和B树的区别。

②B+树的插入

B+插入操作很简单,掌握一个要点即可:当结点关键字数量大于m-1的时候,按中间关键字分裂成左右两部分,中间关键字分裂到父结点当做索引存储,但是,中间的关键字自身还是分裂右边结点这一部分的。下面给大家举一个B+树的插入例子:向一颗5阶的B+树中插入元素。分析:5阶B+树的结点中最少2个关键字,最多4个关键字。

01

插入10,16,22,28

02

插入30,此时该结点的关键字数量大于4个了,进行结点分裂

03

接着插入35,39,结点继续分裂

③B+树的插入

对于删除操作是比B树简单一些的,由于叶子结点有指针的存在,向兄弟结点借元素时,不需要通过父结点了,而是可以直接通过兄弟节移动即可(前提是兄弟结点的元素大于m/2),然后更新父结点的索引;如果兄弟结点的元素不大于m/2(兄弟结点也没有多余的元素),则将当前结点和兄弟结点合并,并且删除父结点中的关键字。下面我们来看一个例子:初始状态B+树:

01

删除22,删除后,发现B+树不满足要求,且左边兄弟结点的关键字个数够借,借关键字后再修改父结点索引。

02

删除元素28,发现B+树不满足要求,并且发现左右兄弟结点都没有多余的关键字可借,此时选择与其兄弟结点合并再修改父结点索引。

此时,其父结点(30)也不满足B+树条件,故将结点30与其兄弟结点进行合并

03

相关习题

01

(2012年统考)已知一棵三阶B树,如下图所示删除关键字78得到一棵新B树,其 最右叶结点中的关键字是()

A、60

B、 60, 62

C、62, 65

D、65

(点击选项查看答案)Tips:根据B树应满足的条件以及删除B树结点的准则即可解题。

02

(2016年统考)B+树不同于B树的特点之一是()

A、能支持顺序查找

B、 结点中含有关键字

C、根结点至少有两个分支

D、所有叶结点都在同一层上

(点击选项查看答案)Tips:B+树的叶结点包含了全部关键字信息,且按大小排列,故B+树支持顺序查找。B树只支持多路查找。

03

(2018年统考)高度为5的3阶B树含有的关键字个数至少是()

A、15

B、31

A、解放思想

B、与时俱进

C、实事求是

D、持续稳定

C、62

D、242

(点击选项查看答案)Tips:3阶B树的非根结点所包含的关键字个数最少是2个,而根结点最少包含1个关键字,这样的树型相当于一棵高度为5的满二叉树,利用公式计算出其包含的关键字个数最少是31。

计算机考研qq群

总群:625590924

广大:1143982604

暨大:1071137230

广工:938111325

华工:428389734

深大:729770764

浙大:978938582

厦大:1125268501

中大:921801084

南航:281118241

华农:515681663

重邮:736197896

北邮:1126650806

南邮:1109929146

广外:976231252

东北大学:1128523098

华南师大:428389734

南昌大学:923249141

给个“在看”支持一下我

高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树相关推荐

  1. 高度为5的3阶b树含有的关键字个数_第15期:索引设计(索引组织方式 B+ 树)

    谈到索引,大家并不陌生.索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO. 任何有数据的场景几乎都有索引,比如手机通讯录.文件系统(ext4xfsntfs).数据 ...

  2. 高度为5的3阶b树含有的关键字个数_B-树和B+树的应用:数据搜索和数据库索引...

    B-树 1 .B-树定义:有序数组+平衡多叉树 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树 ...

  3. c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...

    第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...

  4. 求树的遍历、树的叶子节点个数、树的高度、copy树

    1 #include<iostream> 2 3 using namespace std; 4 5 typedef struct Treenode 6 { 7 Treenode* left ...

  5. 3层b+树索引访问磁盘次数_【112期】面试官:为什么选择B+树作为数据库索引结构?谈谈你的理解

    本文同步Java知音社区,专注于Java 阶段汇总集合:++小Flag实现,一百期面试题汇总++ 背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1] 不同容量的存储器,访 ...

  6. 目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解

    B树 1.1B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数.当m取2时,就是我们常见的二叉搜索树. ...

  7. 3层b+树索引访问磁盘次数_深入理解MySQL索引底层实现原理丨技术干货

    一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...

  8. 《数据结构与算法》(十九)- 多路查找树

    目录 前言 1. 多路查找树(B树) 1) 2-3树 1.1) 2-3树的插入实现 1.2) 2-3树的删除实现 2) 2-3-4树 3) B树 4) B+树 2. 总结 原文地址:https://p ...

  9. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

最新文章

  1. 即学即用的数据分析技巧
  2. web service(web服务)总结
  3. 90 % Java 程序员被误导的一个性能优化策略
  4. 程序人生:初学者最常问的几个问题
  5. 【实践】腾讯PCG数据中台DEVOPS和AIOPS实践.pdf(附下载链接)
  6. struts中几种常用的Action
  7. 深度学习推荐模型-WideDeep
  8. 系统学习机器学习之模型选择
  9. 以太网协议号字段定义
  10. 火焰检测的基本方法研究和实现
  11. Python内置TCP服务器
  12. sublime改成中文简体及菜单变成中文
  13. 计算机重装后不能启动怎么办,重装系统后无法进入系统怎么办 修复进不去系统方法教程...
  14. python 单词纠错_自然语言处理1——语言处理与Python(内含纠错)
  15. mysql查看数据库
  16. Windows 10 D盘操作需要管理员权限
  17. 工信部:将实施国家软件重大工程解决关键软件“卡脖子”问题丨权威发布
  18. [蛋蛋涂鸦]沪江小D清新桌面壁纸
  19. 微信小程序----微信小程序浏览pdf文件
  20. BP神经网络的非线性函数拟合

热门文章

  1. jmeter file upload 变量_通达OA上传漏洞之变量覆盖分析
  2. @modelattribute注解用postman测试怎么传参_谁要是再敢用Map传参,我过去就是一JIO...
  3. 多个if用什么设计模式_抽丝剥茧——单例设计模式
  4. ubuntun系统mysql数据库同步_Ubutun 14.10下mysql 主从同步详细操作
  5. python自动化运维书籍推荐_《Python 自动化运维:技术与最佳实践》
  6. linux源码下载阿帕奇,Ubuntu 12.04下源码安装Apache
  7. python将数据写入Excel
  8. OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
  9. Android之自定义ViewGroup
  10. 利用gitbash上传项目到github