B+树

B+树:

B+ 树是一种数据结构,是一个n叉排序树,每个节点通常有多个孩子,

B+ 树通常用于数据库和操作系统文件系统中。

B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入

 

B+树是对B树的一种变形树,它与B树的差异在于:

  1. 有k个子结点的结点必然有k个关键码;
  2. 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
  3. 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录

B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,因此在内存页中能够存放更多的key叶子节点上的数据就有更好的缓存命中率。

所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。

如下图的例子:

m阶B+树表示了内部结点最多有m-1个关键字(或者说内部结点最多有m个子树),阶数m同时限制了叶子结点最多存储m-1个记录。

B+树的插入:

1:若为空,创建一个叶子节点,然后其叶节点就是根节点

2:针对叶子类型结点:根据key值找到叶子结点,向这个叶子结点插入记录。插入后,若当前结点key的个数小于等于m-1,则插入结束。否则将这个叶子结点分裂成左右两个叶子结点,左叶子结点包含前m/2个记录,右结点包含剩下的记录,将第m/2+1个记录的key进位到父结点中(父结点一定是索引类型结点),进位到父结点的key左孩子指针向左结点,右孩子指针向右结点。将当前结点的指针指向父结点,然后执行第3步。

3:针对索引类型结点:若当前结点key的个数小于等于m-1,则插入结束。否则,将这个索引类型结点分裂成两个索引结点,左索引结点包含前(m-1)/2个key,右结点包含m-(m-1)/2个key,将第m/2个key进位到父结点中,进位到父结点的key左孩子指向左结点, 进位到父结点的key右孩子指向右结点。将当前结点的指针指向父结点,然后重复第3步。

 

例:下面是一颗5阶B树的插入过程,5阶B数的结点最少2个key,最多4个key。

第一步:  插入5

5

 

 

 

第二步:  插入8,10,15

5

8

10

15

第三步:  插入16(超过4了,就开始加一层,左边最少2个)

第四步:  插入17,18((17/18都大于16,所以就会)当插入18时会超过4,所以又分出一个)

参考:https://www.cnblogs.com/nullzx/p/8729425.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值