B-和B+树的定义、性质特点、举例说明

在学习B-、B+树之前应先学习过二叉排序树/二叉搜索树/二叉查找树!!!和平衡二叉树

B-树(B-Tree)的简介
B-树(B-Tree)是一种平衡的多路查找树,它在文件系统中很有用。它适合在磁盘等直接存取设备上进行动态表查找,即外存设备。
一棵m阶的B-树,或者为空树,或为满足下列特性的m叉树:
(1)树中每个节点至多有m棵子树(即至多有m-1个关键字);(由此性质看树的阶,看子树的最多数量)
(2)除根结点外,其他节点至少有m/2个孩子结点(即至少有m/2-1=(m-1)/2个关键字);
(3)若根结点不是叶子结点,则根结点至少有两个孩子结点/两棵子树;
(4)每个结点的结构:
在这里插入图片描述
其中,n为该节点中的关键字个数,除根结点外,其他所有结点的n大于等于m/2-1,且小于等于m-1;ki(1≤i≤n)为该结点的关键字且满足ki<ki+1;pi(0≤i≤n)为该结点的孩子结点指针且满足pi(0≤i≤n-1)结点上的关键字大于等于ki且小于ki+1,pn节点上的关键字大于kn。
(5)所有叶子结点都在同一层上,即B-树是所有结点的平衡因子均等于0的多路查找树

B-树的查找
B-树的查找类似二叉排序树的查找,所不同的是B-树上的每个结点是多关键字的有序表,在到达某个结点时,先在有序表中查找,若找到,则查找成功;否则,到相应指针所指向的子树中去查找,当到达叶子结点时,则说明树中没有对应的关键字,查找失败。即在B-树上的查找过程是一个沿着指针顺序地寻找结点,然后在结点中查找关键字交替进行的过程。

B-树的举例说明
一棵五阶的B-树
①查找关键字84:比根结点a55大,所以往右边,去到c结点,比69大,往右,比78大,去到i结点,比79大,往右,等于84,查找成功。
②查找关键字38:比根结点a55小,所以往左边,去到b结点,比10大,往右,比28大,去到f结点,比33大,往右,比40小,得知介于(33,40)之间,由于A2是叶子结点,所以查找失败。

B+树的简介
索引顺序文件组织的一个最大缺点是随着文件的增大,索引查找性能和顺序扫描性能都会下降。B+树(B+ Tree)采用平衡树结构,其中每个叶子结点到根的路径长度相同,每个非叶子结点有 m/2向下取整~m 个孩子结点,其中m为B+树的阶数。
结点结构:
在这里插入图片描述
B-和B+树的区别/B+树的特点
B+树是应文件系统所需而产生的一种B-树的变形树。一棵m阶的B+树和m阶的B-树的差异在于:
(1) 有n棵子树的结点中含有n个关键字;
(2) 所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接;
(3) 所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。
B+树结构示意图
一棵5阶B+树
B+树的查找
在B+树上进行随机查找、插入和删除的过程基本上与B-树类似。只是**在查找时稍微有些区别:在查找过程中,当某个非终端结点上的关键字等于给定值时,B-树立即终止查找过程并返回成功;而在B+树中继续向下查找直到叶子结点。**因此,在B+树,不管查找成功与否,每次查找都是走了一条从根到叶子结点的路径。

B+树查找的分析类似于B-树。B+树的插入仅在叶子结点上进行。当结点中的关键字个数大于m时,该结点要分裂成两个结点,它们所含关键字的个数分别为 (m+1)/2 向下取整和(m+1)/2 向上取整 .并且它们的双亲结点中应同时包含这两个结点的最大关键字。B+树的删除也仅在叶子结点进行,当叶子结点中的最大关键字被删除时,其在非终端结点中的值可以作为一个“分界关键字”存在。若因删除而使结点中关键字的个数少于m/2向上取整时,其和兄弟结点的合并过程亦和B-树类似

B+树的举例说明
一棵5阶B+树 通常在B+树有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。所以可以对B+树进行两种查找运算:一种是从最小关键字开始的顺序查找,另一种是根结点开始的随机查找。