目录

1、B树

1.1、B树的定义

1.2、B树的高度(磁盘存取次数)

1.2.1、最小高度

1.2.2、最大高度

1.3、B树的查找

1.4、B树的插入

1.5、B树的删除

2、B+树

2.1、B+树的基本概念

2.2、B+树与B树的差异

2.3、B+树的查找、插入和删除


1、B树

1.1、B树的定义

B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:

1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。

2)若根节点不是终端结点,则至少有两棵子树。

3)除根节点外的所有非叶结点至少有棵子树,即至少含有个关键字。(***博主认为是为了减少不必要的层高,提高效率和资源利用率***)

4)所有非叶结点的结构如下:

Ki(i = 1,2,...,n)代表关键字且满足K1<K2<...<Kn;

Pi(i = 0,1,...,n)代表指向子树根节点的指针。

例如:P0所指的子树中的所有结点的关键字均需小于K1,而P1所指子树中所有结点的关键字均大于K1。

5)所有的叶结点都出现在同一层次上,并且不带任何信息(可以视为外部结点或类似于二分查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。

B树是所有结点的平衡因子均为0的多路平衡查找树。

1)结点的孩子个数等于该结点中关键字个数加1.

2)如果根节点没有关键字就没有子树,此时B树为空;如果根节点有关键字,则其子树必然大于等于两棵,因为子树个数等于关键字个数加1。

3)除根节点外的所有非终端结点至少有棵子树(2个关键字),至多有5棵子树(4个关键字)。

4)结点中关键字从左到右递增有序,关键字两侧均有指向子树的指针,左边指针所指子树的所有关键字均小于该关键字,右边指针所指子树的所有关键字均大于该关键字。或者看成下层结点关键字总是落在上层关键字所划分的区间内。

5)所有叶结点均在第4层,代表查找失败的位置。

1.2、B树的高度(磁盘存取次数)

B树中大部分操作所需的磁盘存取次数与B树的高度成正比。下面来分析B树在不同情况下的高度。

B树的高度本博文中假设不包括最后的不带任何信息的叶节点所处的那一层。

若n>=1,则对任意一棵包含n个关键字、高度为h、阶数为m的B树

1.2.1、最小高度

因为B树中每个结点最多有m棵子树,m-1个关键字,所以在一棵高度为h的m阶B数中关键字的个数应满足

因此有

1.2.2、最大高度

若让每个结点中的关键字个数达到最少,则容纳同样多关键字的B树的高度达到最大。由B树的定义可知:第一层至少有1个结点;第二层至少有2个结点;除根结点外的每个非终端结点至少有棵子树,则第三层至少包含个结点......第h+1层至少有个结点,注意到第h+1层是不包含任何信息的叶节点。对于关键字个数为n的B树,叶节点即查找不成功的结点为n+1,由此有,即

例如,假设一棵3阶B数共有8个关键字,则其高度范围为2≤h≤3.17。

1.3、B树的查找

在B树上进行查找和二叉查找树很相似,只是每个结点都是多个关键字的有序表,在每个结点上所做的不是两路分支决定的,而是根据该结点的子树所做的多路分支决定。

B树的查找包括两个基本操作:①在B树上找结点;②在结点内找关键字。由于B树常存储在磁盘上,因此前一个查找操作是在磁盘上进行的,而后一个查找操作是在内存中进行的,即在找到目标结点后,先将结点信息读入内存,然后再结点内采用二分查找或折半查找。

在B树上查找到某个结点后,先在有序表中进行查找,若找到则查找成功。否则按照对应的指针信息到所指的子树中去查找

1.4、B树的插入

与二叉查找树的插入操作相比,B树的插入操作要复杂得多。在二叉查找树中,仅需查找到需要插入的终端结点的位置。但是,在B树中找到插入的位置后,并不能简单地将其添加到终端结点中,因为此时可能会导致整个树不再满足B树定义的要求。将关键字key插入B树的过程如下:

1)定位。利用前叙的B树查找算法,找出插入该关键字的最低层中某个非叶结点(在B树中查找key时,会找到表示查找失败的叶节点,这样就确定了最底层非叶结点的插入位置。注意:插入位置一定是最底层中的某个非叶结点)。

2)插入。在B树中,每个非失败结点的关键字个数都在区间内。插入后的结点关键字个数小于m,可以直接插入;插入后检查被插入结点内关键字的个数,当插入后的结点关键字个数大于m-1时,必须对结点进行分裂。

分裂的方法:取一个新结点,在插入key后的原结点,从中间位置将其中的关键字分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新结点中,中间位置的结点插入原结点的父结点。若此时导致父结点的关键字个数也超过上限,则继续进行这种分裂操作,直至这个过程传到根节点为止,进而导致B树的高度增1。

对于m=3的B树,所有结点中最多有m-1=2个关键字,若某结点中已有两个关键字,则结点已满。如上图所示,插入一个关键字60后,结点内的关键字个数超过了m-1,结点此时必须进行分裂。

1.5、B树的删除

B树中的删除操作与插入操作类似,但要稍微复杂一些,即要使得删除后的结点中的关键字个数≥,因此涉及结点的“合并”问题。

当被删关键字k不在终端结点(最底层非叶结点)中时,可以用k的前驱(或后继)k'来替代k,然后在相应的结点中删除k',关键字k'必定落在某个终端结点中,则转换成了被删关键字在终端结点中的情形。

在上图所示的4阶B树中,删除关键字80,用其前驱78替代,然后在终端结点中删除78,因此只需讨论删除终端结点中关键字的情形。

当被删关键字在终端结点(最低层非叶结点)中时,有下列三种情况:

1)直接删除关键字。若被删除关键字所在结点的关键字个数≥,表名删除该关键字后仍满足B树的定义,则直接删去该关键字

2)兄弟够借

若被删除关键字在你所在结点删除前的关键字个数为,且与此结点相连的右(或左)兄弟结点的关键字个数≥,则需要调整该结点、右(或左)兄弟结点及其双亲结点(父子换位法),以达到新的平衡。在下图(a)中删除4阶B数的关键字65,右兄弟关键字个数≥=2,将71取代原来65的位置,将74调整到71的位置

3)兄弟不够借。若被删除关键字所在结点删除前的关键字个数为,且此时与该结点相邻的左、右兄弟结点的关键字个数均为,则将关键字删除后与左(或)右兄弟结进行合并。在上图(b)中删除B树中的关键字5,它及其右兄弟结点的关键字个数=,故在5删除后将60合并到65结点中。

在合并过程中,双亲结点中的关键字个数会减1.若其双亲结点是根节点且关键字个数减少至0(根节点关键字个数为1时,有2棵子树),则直接将根节点删除,合并后的新结点成为根;若双亲结点不是根节点,且关键字个数减少到,且又要与它自己的兄弟结点进行调整和合并操作,并重复上述步骤,直至符合B树的要求为止。

2、B+树

2.1、B+树的基本概念

B+树是应数据库所需而出现的一种B树的变形树。

一棵m阶的B+树需满足下列条件:

1)每个分支结点最多有m棵子树(孩子结点)

2)非叶根节点至少有两棵子树,其他每个分支结点至少有棵子树。

3)结点的子树个数与关键字个数相等。

4)所有叶结点包含全部关键字及指向对应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序互联链接起来。

5)所有分支结点(可视为索引的索引)中仅仅包含它的各个子结点(即下一级的索引块)中关键字的最大值及指向子结点的指针。

2.2、B+树与B树的差异

m阶B+树与m阶B树的主要差异如下:

1)在B+树中,具有n个关键字的节点只含有n棵子树,即每个关键字对应一颗子树;而在B树中,具有n个关键字的结点含有n+1棵子树。

2)在B+树中,每个结点(非根内部结点)的关键字个数n的范围是(根节点:1≤n≤m);

在B树中,每个结点(非根内部结点)的关键字个数n的范围是m-1(根节点:1≤n≤m-1)。

3)在B+树中,叶结点包含信息,所有非叶结点仅起索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。

4)在B+树中,叶结点包含全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。

上图所示为一棵B+树。通常在B+树中有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点。因此,可以对B+树进行两种查找:一种是从最小关键字开始的顺序查找。另一种是从根节点开始的多路查找。

2.3、B+树的查找、插入和删除

B+树的查找、插入和删除和B树的基本类似。只是在查找过程中,非叶结点上的关键字值等于给定值时并不终止,而是继续向下查找,直到找到叶结点上的该关键字为止。所以在B+树中查找时,无论查找成功与否,每次查找都是一条从根节点到叶结点的路径。

数据结构(54) B树、B+树相关推荐

  1. 数据结构:树套树-替罪羊树套权值线段树

    BZOJ3065 本题是在BZOJ上的处女A,实在不应该拿这样一道题来开头 平衡树套线段树应该是树套树问题里比较难的一种了,当然我记得还有一个替罪羊树套Trie树的题,我是不信自己能写出来的. 外层的 ...

  2. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

  3. 《大话数据结构》6、7树、图

    第6章树 149 树: 树 (Tree) 是 n (n>=0) 个结点的有限集 . n=0 时称为空树. 在任意一棵非空 树中: ( 1 ) 有旦仅有一个特定的称为根 (Root) 的结点: ( ...

  4. 20172328《程序设计与数据结构》实验二:树

    20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:201 ...

  5. 数据结构和算法分析:B树 B+树 和B*树的总结

    1. 前言 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B ...

  6. 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 来源:万向区块链 原文标题:三分钟了解区块链常用数据结构「默克尔树」 默克尔树是 ...

  7. 数据结构(哈夫曼树+KMP)之 数据加密+解密

    数据结构(哈夫曼树+KMP)之 数据加密+解密 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 1 ...

  8. 数据结构---二叉平衡排序树的删除

    数据结构-二叉平衡排序树的删除 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> typedef struct avlT ...

  9. 数据结构之树:树的介绍——9

    数据结构之树,介绍篇 树的基本定义 介绍:树(tree)是计算机中非常重要的数据结构,它的外形看起来像一颗倒挂着的的树,使用树这种结构可以描述生活中很多的事物,如族谱,单位的组织架构,xml,html ...

  10. 【数据结构与算法基础】树的应用

    写在前面 树这一数据结构学的差不多了,该拉出来练练了.本节学习几个树的应用,包括优先队列.Huffman编码等. 1.优先队列(Priority Queue) 优先队列是特殊的"队列&quo ...

最新文章

  1. C语言的数顺序输出与反序输出_只愿与一人十指紧扣_新浪博客
  2. websocket采用tomcat方式,IOC类对象无法注入的解决方案
  3. 宅久伤身?最新研究:独居让免疫系统变强了,但阿尔兹海默风险也变高了
  4. 图像中添加二项式分布噪声
  5. 160个Crackme032用ProcessMonitor拆解KeyFile保护
  6. 最新综述:对话系统之用户模拟器
  7. 诺基亚手机运行linux,Ubuntu携手诺基亚Linux进军手机操作系统将改变市场
  8. matlab算概率,用matlab计算概率,再次吐槽某些吧友国战比赛七框选将的建议
  9. java gui 单选_JavaGUI――swing组件基础(三)JCheckBox/JRadioButton/ButtonGroup
  10. leetcode题解56-合并区间
  11. linux内存管理(十四)-内存OOM触发分析
  12. mysql跨库分页查询,“跨库分页”的四种方案
  13. 学习Jammendo代码的心路历程(二)ViewFlipper数据的填充
  14. POJ 2287 田忌赛马 贪心算法
  15. 一个简单的DNS服务器架设
  16. 小学生作业打印推荐哪个软件?
  17. NDK 入门与进阶—第一个NDK程序(一)
  18. linux notifier
  19. 美通企业日报 | 四所中国大陆高校进入亚洲大学前十;工作时间过长威胁IT从业人员健康...
  20. android 快速实现图片压缩与上传

热门文章

  1. BOM物料清单,金蝶KIS旗舰版专业版金蝶K3WISE生产管理软件ERP
  2. 转:Emacs生存指南 (Emacs入门必读)
  3. Coursera登不上的全套方法
  4. Linux 安装gcc编译器
  5. AD报错 unknown pin
  6. FleaPHP 域名事件搞笑版
  7. C语言程序设计:这里输入一个数,分别求其平方值、立方值和平方根。
  8. 配置windows系统中 PHP的环境变量
  9. sql server 全文检索 使用
  10. 连接MySQL错误:Can#39;t connect to MySQL server (10060)