Java教程

第五章 B树和B+树

本文主要是介绍第五章 B树和B+树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

2-3树

2-3树是一种多路查找树:2和3的意思就是2-3树包含两种结点

1)2结点包含一个元素和两个孩子(或者没有孩子)。
①左子树包含结点的元素值小于该结点的元素值,右子树包含的结点的元素值大于该结点的元素值②2结点要不有两个孩子,要不就没有孩子,不允许有一个孩子

2)3结点包含一大一小两个元素和三个孩子(或者没有孩子)。(两个元素按大小顺序排列好)
①左子树包含的结点的元素值小于该结点较小的元素值,右子树包含的结点的元素值大于该结点较大的元素值,中间子树包含的结点的元素值介于这两个元素值之间。
②3结点要不有三个孩子,要不就没有孩子,不允许有一个或两个孩子

3)2-3树所有叶子结点都在同一层次

 2-3-4树

 2-3-4树也是一种多路查找树:2和3和4的意思就是2-3-4树包含三种结点

3)4结点包含小中大三个元素和四个孩子(或者没有孩子)。
1、最左子树包禽的结点的元素值小于该结点最小的元素值,第二个子树包含的结点的元素值大于最小的元素值小子中间元素值,第三个子树包含的结点的元素值大于中间元素值小于最大元素值,最右子树包含的结点的元素值大于该结点最大的元素值。
2、4结点要不有四个孩子,要不就没有孩子,不允许有一个或两个或三个孩子

4)2-3-4树所有叶子结点都在同一层次

B树

B树也是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例,我们把树中结点最大的孩子数目称为B树的阶。通常记为m。
—棵m阶B树或为空树,或为满足如下特性的m叉树:


1)树中每个结点至多有m棵子树。(即至多含有m-1个关键字)("两棵子树指针夹着一个关键字")

2)若根结点不是终端结点,则至少有两棵子树。(至少一个关键字)
3)除根结点外的所有非叶结点至少有「m/2】棵子树。(即至少含有「m/2】-1个关键字)

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


5)所有的叶子结点出现在同一层次上,不带信息。(就像是折半查找判断树中查找失败的结点)

 1.B树的查找操作


B树是多路查找树,二叉排序树是二路查找,B树是多路查找,所以它是二叉排序树的拓展。因此,B树的查找操作和二叉排序树的查找操作非常类似。
查找过程∶①先让待查找关键字key和结点的中的关键字比较,如果等于其中某个关键字,则查找成功。
②如果和所有关键字都不相等,则看key处在哪个范围内,然后去对应的指针所指向的子树中查找。

Eg:如果Key比第一个关键字K,还小,则去Po指针所指向的子树中查找,如果比最后一个关键字Kn还大.则去Pn指针所指向的子树中查找。

 

 

 

 3.B树的删除操作


B树中的删除操作与插入操作类似,但要稍微复杂些,要使得删除后的结点中的关键字≥[m/2]-1,因此将涉及结点的“合并”问题。由于删除的关键字位置不同,可以分为关键字在终端结点和不在终端结点上两种情况。

1)如果删除的关键字在终端结点上(最底层非叶子结点):
①结点内关键字数量大于[m/2]-1,这时删除这个关键字不会破坏B树的定义要求。所以直接删除。
②结点内关键字数量等于[m/2]-1,并且其左右兄弟结点中存在关键字数量大于[m/2]-1的结点,则去兄弟阶段中借关键字。
③结点内关键字数量等于[m/2]-1,并且其左右兄弟结点中不存在关键字数量大于[m/2]-1的结点,则需要进行结点合并。

 

 

 

 

 

 

 2)如果删除的关键字不在终端结点上(最底层非叶子结点)︰需要先转换成在终端结点上,再按照在终端结点上的情况来分别考虑对应的方法。
相邻关键字∶对于不在终端结点上的关键字;它的相邻关键字是其左子树中值最大的关键字或者右子树中值最小的关键字。

第①步︰找出这个待删除关键字的相邻关键字,比如说下图中10的相邻关键字就是9或者是11,其实就是这个大小序列中该关键字的直接前驱或者是直接后继关键字。
  

 第②步︰将这个待删除的关键字和某个相邻关键字互换,然后删除终端结点的关键字

 

 第二种情况︰左右子树的关键字数量均等于m/2  -1,则将这两个左右子树结点合并,然后删除待删除关键字。

 

 将待删除节点和相邻关键字进行交换

 

 

 B+树

B+树是常用于数据库和操作系统的文件系统中的一种用于查找的数据结构
m阶的B+树与m阶的B树的主要差异在于:
1)在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树。
2))在B+树中,每个结点(非根内部结点)关键字个数n的范围是m/2 ≤n≤m (根结点1≤n≤m),在B树中,每个结点(非根内部结点)关键字个数n的范围是 m/2 -1≤n≤m-1(根结点∶1≤n≤m-1)。

3)在B+树中,叶结点包含信息,所有非叶结点仅起到索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
4))在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。

5)在B+树中,有一个指针指向关键字最小的叶子结点,所有叶子结点链接成一个单链表。

其他啦啦啦啦:

 

 

 

  

 

 

  

 

 

 

 

  

 

 

数据结构b树和kmp算法_哔哩哔哩_bilibiliicon-default.png?t=L892https://www.bilibili.com/video/BV1ot41127vG?p=2资料来源于王道考研

这篇关于第五章 B树和B+树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!