B树及其基本操作、B+树的基本概念

1、B树、B+树的基本概念

(1)、B树的基本概念及性质

1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。

一棵m阶B树或为空树,或为满足下列特性的m叉树

  1. 若根结点不是终端节点,则至少有两棵子树,最多有m棵子树。
  2. 除根结点外的所有非叶结点至少有⌈m/2⌉棵子树,最多有m棵子树。
  3. 所有的非叶结点都出现在同一层次上,并且不带信息(可视为失败结点)。
  4. 所有非叶结点的结构如下:

在这里插入图片描述

a)、Pi-1所指子树中所有结点的关键字均小于Ki
b)、Pi所指子树中所有结点的关键字均大于Ki

(2)、B+树的基本概念及性质

B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。

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

  1. 每个分支结点最多有m棵子树。
  2. 非叶根结点至少有两棵子树,其他每个分支结点至少有⌈m/2⌉棵子树。
  3. 结点的子树个数与关键字个数相等。
  4. 所有叶结点包含全部关键字及指向相应记录的指针,而且叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来。
  5. 所有分支结点(可视为索引的索引)中仅包含它的各个子结点(即下一级的索引块)中关键字的最大值及指向其子结点的指针。

2、B树与B+树的区别

  1. 在B树中,具有n个关键字的结点含有(n+1)棵子树;而在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树。
  2. 在B树中,根结点的关键字个数n的范围是1 <= n <= m-1,非根结点的范围是⌈m/2⌉-1<=n <= m-1;而在B+树中,根结点的关键字个数n的范围是1 <= n <= m,非根结点的范围是⌈m/2⌉<=n <= m。
  3. 在B+树中,所有非叶结点仅起到索引作用,即结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
  4. 在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的;而在B+树中,叶结点包含了全部关键字,即其他非叶结点中的关键字包含在叶结点中。

3、B树的基本操作

(1)、B树的查找

B树的查找算法如下:

①、在B树中找结点(磁盘上进行),当查找到叶结点时,查找失败。
②、在结点内的多关键字有序表中查找关键字(内存中进行):

a)、先在有序表中进行查找,若找到则查找成功。
b)、否则,根据找到的指针信息到所指的子树,执行①。

对于含有n个关键字的B树的查找,磁盘I/O次数也就是树的高度h(不包含叶结点)满足h <= log⌈m/2⌉((n+1)/2)+1

(2)、B树的插入

B树的插入过程如下:

1)、查找:利用B树的查找算法,找出插入该关键字的最底层中某个非叶结点。

2)、插入:当插入后的结点关键字个数小于m,则可以直接插入;如果等于m,则必须对结点进行分裂。

一棵3阶B树的分裂过程及方法如图2-1所示:

图1 结点分裂示意图

图2-1 结点分裂示意图

若此时导致其父结点的关键字个数也超过了上限,则继续进行这种分裂操作。若最终使得根结点分裂,B树的高度增1。

(3)、B树的删除

为使删除后的结点中的关键字个数 >= ⌈m/2⌉-1,将涉及结点的“合并”问题。
(1)当被删除的关键字k在非叶结点中时:
①、如果小于(大于)k的子树中关键字个数 > ⌈m/2⌉-1,则找出k的前驱(后继)值k’,并且用k’来取代k,再递归地按此方法删除k’。
②、如果前后两个子树中关键字个数均为⌈m/2⌉-1,则将两个子结点合并,直接删除k。如图3-1所示为某4阶B树的一部分。
在这里插入图片描述

图3-1 B树中删除非叶结点关键字的合并

(2)当被删除的关键字k在叶结点中时:
①、若该结点的关键字个数 > ⌈m/2⌉-1,则直接删除该关键字。
②、若该结点的关键字个数 = ⌈m/2⌉-1,且与此结点相邻的左(右)兄弟结点的关键字个数 >= ⌈m/2⌉,需要调整该结点、左(右)兄弟结点以及其双亲结点(父子换位法),以达到新的平衡,如图3-2所示。
在这里插入图片描述

图3-2 关键字所在结点的兄弟结点“够借”时的合并示意图

③、若该结点关键字个数 = ⌈m/2⌉-1,且与该结点相邻的左(右)兄弟结点的关键字个数 = ⌈m/2⌉-1,则将该关键字删除后与左(右)兄弟结点及双亲结点中的关键字进行合并,如下图所示。
在这里插入图片描述

图3-2 关键字所在结点的兄弟结点“不够借”时的合并示意图

在合并的过程中,若此时导致其父结点的关键字个数也不满足B树的定义,则继续进行这种合并操作。
若最终使得根结点被合并,B树高度减1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值