B 树,B+树

B 树,B+树,这个坑留了三个月了,今天来补上,参考视频链接:B树自在人心,看不懂,我当场把这个树吃掉!

重要资料,动态演示页面:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

B树

下面我来逻辑一下我的整理

  • B树和B-树是等价的

  • B树具有二叉排序树平衡二叉树的特性,是一种平衡的多路查找路,B树可以理解为balance-平衡

定义

一棵m阶的B树,满足下列特性的m叉树:

  1. 树中每个结点至多有m棵子树,即关键字至多m-1个;

  2. 若根结点不是叶子结点,则至少有两棵子树,即关键字可以是1个;

  3. 除根之外的所有非终端结点至少有[m/2](向上取整)棵子树;

  4. 所有的非终端结点中包含下列信息数据
    在这里插入图片描述
    其中m为阶树;
    Ki(i=1,…,m-1)为关键字,且Ki<Ki+1,即终端结点内关键字有序;
    Pi(i=1,…,m)为指向子树根结点的指针,且指针Pi所指子树中所有结点的关键字均小于Ki,Pi+1所指子树中所有结点的关键字均大于Ki

  5. 所有叶结点处于同一层;可以用空指针表示,是查找失败到达的位置。

举例说明一下5阶B树
在这里插入图片描述

  1. 性质1,,每个终端结点都至多可以填充4个关键字(对应K),5棵子树(对应P)
  2. 性质2,根节点可以只有1个关键字,2棵子树
  3. 性质3,除根之外的所有非终端结点,至少3棵树,至少2个关键字
  4. 性质4,终端结点内关键字有序,对应K,如(15,26)、(22,25);P1所指子树中所有结点的关键字均小于K1,P2所指子树中所有结点的关键字均大于K1,依次类推
    在这里插入图片描述
  5. 性质5,所有叶结点处于同一层,最终高度都为3

B树插入过程

用以下关键字序列{1,2,6,7,11,4,8,13,10,5,17,9,16,20,3,12,14,18,19,15}创建一棵5阶B树。

由性质我们可以得知,非终端结点关键字最多4个

初始情况
在这里插入图片描述

1,2,6,7插入
在这里插入图片描述
11插入
在这里插入图片描述
调整,取出中间关键字6
在这里插入图片描述

4,8,13插入
在这里插入图片描述
10插入
在这里插入图片描述
调整,取出中间关键字10
在这里插入图片描述
5,17,9,16插入
在这里插入图片描述
20插入
在这里插入图片描述
调整,取出中间关键字16
在这里插入图片描述
3插入
在这里插入图片描述
调整,取出中间关键字3
在这里插入图片描述
12,14,18,19插入
在这里插入图片描述
15插入
在这里插入图片描述
调整,取出中间关键字13在这里插入图片描述

调整,取出中间关键字10
在这里插入图片描述

B树删除过程

对于上述构建的B树,给出删除关键字8、16、15、4的过程。
在这里插入图片描述8删除
在这里插入图片描述
由性质3可得,除根之外的所有非终端结点至少有[m/2](向上取整)棵子树,即至少3棵树,至少2个关键字,删除8后不影响B树性质,直接删除
在这里插入图片描述
16删除
在这里插入图片描述
由性质3可得,除根之外的所有非终端结点至少有[m/2](向上取整)棵子树,即至少3棵树,至少2个关键字,删除16后影响B树性质,不能直接删除,需要调整

这里调整一般有两种思路

  1. 向孩子结点借结点
  2. 向兄弟结点借结点

图中使用了第2种策略,借
在这里插入图片描述
调整后
在这里插入图片描述


PS:插入第一种策略
在这里插入图片描述


15删除

在这里插入图片描述
15删除与上述第一种策略一致,借兄弟,调整后,

4删除

在这里插入图片描述
最后一种出现无兄弟,无孩子可借,必须合并结点

合并思路,将删除后的非终端结点与兄弟非终端结点合并(原则是选择关键字较少的兄弟结点),同时合并父结点一个关键字,这里假设与右兄弟合并
在这里插入图片描述
合并后如下
在这里插入图片描述
此时关键字也是相同的情况,需要再做一次合并
在这里插入图片描述
合并后

在这里插入图片描述

B+树

在这里插入图片描述
B+树是基于B树的变形时,一棵m阶的B+树和m阶的B一树的差异在于:

  1. 在B+树中,具有n个关键字的结点含有n个分支;而在B树中,具有n个关键字的结点含有n+1个分支。
  2. 在B+树中,每个结点(除根结点以外)中的关键字个数n的取值范围为[m/2]<=n<=m,根结点的取值范围为2<=n<=m;而在B树中,它们的取值范围分别是[m/2]-1<=n<=m和1<=n<=m(B+树关键字同分支相同)
  3. 在B+树中叶子结点包含信息,并且包含了全部关键字,叶子结点引出的指针指向记录。
  4. B+树中所有非叶子结点仅仅起到一个索引的作用,即结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址;而在B树中,每个关键字对应一个记录的存槠地址
  5. 在B+树上有一个指针指向关键字最小的叶子结点,所有叶子结点链接成一个线性链表,而B树没有。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值