高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树
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树相关推荐
- 高度为5的3阶b树含有的关键字个数_第15期:索引设计(索引组织方式 B+ 树)
谈到索引,大家并不陌生.索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO. 任何有数据的场景几乎都有索引,比如手机通讯录.文件系统(ext4xfsntfs).数据 ...
- 高度为5的3阶b树含有的关键字个数_B-树和B+树的应用:数据搜索和数据库索引...
B-树 1 .B-树定义:有序数组+平衡多叉树 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树 ...
- c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...
第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...
- 求树的遍历、树的叶子节点个数、树的高度、copy树
1 #include<iostream> 2 3 using namespace std; 4 5 typedef struct Treenode 6 { 7 Treenode* left ...
- 3层b+树索引访问磁盘次数_【112期】面试官:为什么选择B+树作为数据库索引结构?谈谈你的理解
本文同步Java知音社区,专注于Java 阶段汇总集合:++小Flag实现,一百期面试题汇总++ 背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1] 不同容量的存储器,访 ...
- 目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解
B树 1.1B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数.当m取2时,就是我们常见的二叉搜索树. ...
- 3层b+树索引访问磁盘次数_深入理解MySQL索引底层实现原理丨技术干货
一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...
- 《数据结构与算法》(十九)- 多路查找树
目录 前言 1. 多路查找树(B树) 1) 2-3树 1.1) 2-3树的插入实现 1.2) 2-3树的删除实现 2) 2-3-4树 3) B树 4) B+树 2. 总结 原文地址:https://p ...
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
最新文章
- 即学即用的数据分析技巧
- web service(web服务)总结
- 90 % Java 程序员被误导的一个性能优化策略
- 程序人生:初学者最常问的几个问题
- 【实践】腾讯PCG数据中台DEVOPS和AIOPS实践.pdf(附下载链接)
- struts中几种常用的Action
- 深度学习推荐模型-WideDeep
- 系统学习机器学习之模型选择
- 以太网协议号字段定义
- 火焰检测的基本方法研究和实现
- Python内置TCP服务器
- sublime改成中文简体及菜单变成中文
- 计算机重装后不能启动怎么办,重装系统后无法进入系统怎么办 修复进不去系统方法教程...
- python 单词纠错_自然语言处理1——语言处理与Python(内含纠错)
- mysql查看数据库
- Windows 10 D盘操作需要管理员权限
- 工信部:将实施国家软件重大工程解决关键软件“卡脖子”问题丨权威发布
- [蛋蛋涂鸦]沪江小D清新桌面壁纸
- 微信小程序----微信小程序浏览pdf文件
- BP神经网络的非线性函数拟合
热门文章
- jmeter file upload 变量_通达OA上传漏洞之变量覆盖分析
- @modelattribute注解用postman测试怎么传参_谁要是再敢用Map传参,我过去就是一JIO...
- 多个if用什么设计模式_抽丝剥茧——单例设计模式
- ubuntun系统mysql数据库同步_Ubutun 14.10下mysql 主从同步详细操作
- python自动化运维书籍推荐_《Python 自动化运维:技术与最佳实践》
- linux源码下载阿帕奇,Ubuntu 12.04下源码安装Apache
- python将数据写入Excel
- OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
- Android之自定义ViewGroup
- 利用gitbash上传项目到github