【B树及B树的基本操作】

1.B树的定义和特性

B树是一种平衡的多路查找树
一棵m阶的B树(B树中所有结点的孩子个数的最大值为m),或为空树,或为满足下列特性的m叉树:

(1) 树中每个结点至多有m棵子树,至多含有m-1个关键字
(2)若根结点不是叶子结点,则至少有两棵子树;
(3) 非根非叶节点至少有 ⌈m/2⌉ 棵子树,至少含有 ⌈m/2⌉-1课子树
(4)所有的非终端节点中包含下列信息数据
在这里插入图片描述
在这里插入图片描述
(5)所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。

我们可以借助实例来分析,例如下图所示为一棵3阶的B树。
在这里插入图片描述
注意绿色黄色标记的结点是内部结点,最下面一层蓝色标记的是外部结点

2.B树的性质

通过这颗3B树,我们可以得到他的一些性质:

(1)节点孩子的个数等于该结点中的关键字个数+1。
(2) 根据 (1)性质可得如果根结点有关键字,则它的子树的个数必然大于或等于2。
(3) 结点中的关键字都是有序的(递增或递减), 关键字两侧均有指向子树的指针,左指针所指子树的所有关键字都小于该关键字,右指针所指子树的所有关键字都大于该关键字。
(4) 下层结点的关键字总是落在有上层结点关键字所划分的区间内。例如本实例3阶B树第二层最右边结点的关键字13 和18划分了3各区间:(-∞,13),(13,18),(18,∞)。
(5)所有叶节点均在第4层上,代表查找失败的结点。

【例-1】下图所示的是一颗()
在这里插入图片描述

A.4阶B树 B.4阶B+树 C.3阶B树 D.3阶B+树
➸欢迎评论区留言

3.B树创建的过程。

(1)插入:

注意:如果插入前B树非空,那么插入位置一定在最底层中的某个非叶节点。
有前面讲的B树的特性可知,所有结点中关键字的个数n满足 ⌈m/2⌉-1<= n <= m-1 , 若插入后的关键字的个数小于m,则可直接插入。也就是每当插入一个结点后,都要检查节点内关键字的个数,看是否满足B树的条件。当插入结点的关键字个数大于m-1,必须对结点进行分裂。
(2)分裂:
从中间位置 ⌈m/2⌉ 将其中的关键字分为两部分,左边部分的关键字放在原节点中,右边部分放到新的节点中。中间位置 ⌈m/2⌉ 的节点插入有以下两种情况:
如果没有双亲节点,新建一个双亲节点,B树的高度增加一层。
如果有双亲节点,将中间位置的节点插入到双亲节点中去。
分裂的过程:
在这里插入图片描述
【例-2】关键子序列为:
(1 ,2 ,6, 7 ,11 ,4 ,8,13, 10 ,5,17 ,9 ,16, 20 ,3 ,12 ,14, 18 ,19 ,15)。
创建一颗5阶B数。
注意: 最多关键字的个数Max = m-1 = 4。

在这里插入图片描述
在这里插入图片描述
小伙伴们,如果觉得有帮助,可以练习下面几道例题.

【例-3】关键子序列为:(5,6,9,13 ,8,2,12,15)。创建一颗4阶B数。
注意: 最多关键字的个数Max = m-1 =3

在这里插入图片描述

【例-4】关键子序列为:(20 30 50 52 60 68 70)给出创建一颗3阶B树。
注意: 最多关键字的个数Max = m-1=2
在这里插入图片描述

4.B树的删除

由前面讲的B树的性质我们知道,在一棵m阶B树中,所有非根非叶节点的关键字个数≥ ⌈m/2⌉-1,所以当我们对结点中的关键字删除后,也要保证其结点内的关键字个数≥ ⌈m/2⌉-1
当删除的关键字K不在最底层非叶结点时,我们可以用其前驱或后继K1来替代K,然后在相应的结点删除K,
我们开看看下面删除的实例吧:
在下图的的4阶B树中删除关键字9,我们用它的前驱8来替代,然后在相应节点中删除8

关键字个数Min=⌈m/2⌉-1=1
在这里插入图片描述
当被删除关键字在最底层非叶结点时,有下列三种情况。
♔♔直接删除关键字。若被删除关键字所在结点的关键字个数≥ ⌈m/2⌉,则直接删除关键字
♔♔兄弟够借。若被删除关键字所在结点的关键字个数= ⌈m/2⌉-1,并且其左右兄弟结点中的关键字个数≥ ⌈m/2⌉,则需要调整左右兄弟以及双亲结点的位置。

我们开看看一个具体实例:
在下图的的4阶B树中删除关键字7

在这里插入图片描述
♔♔兄弟不够借。若被删除关键字所在结点的关键字个数= ⌈m/2⌉-1,并且其左右兄弟结点中的关键字个数=⌈m/2⌉-1,则将关键字删除后,将其左(或右)兄弟与其双亲结点合并。
我们开看看一个具体实例:
在下图的的4阶B树中删除关键字5
在这里插入图片描述

5.总结

今天就先暂时写到这了,水平有限,哪里写的不好,还请谅解,有问题欢迎评论区留言!!!

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值