B树与B+树

B树

1、概念

  • 每个节点最多有m-1个关键字,m表示阶数(二叉树m=2)
  • 根节点最少可以只有一个关键字
  • 非根节点至少有Math.ceil(m/2)-1个关键字,一半左1个最少
  • 每个节点中的关键字都按照从小到大顺序排列,每个关键字的左子树所有关键字都小于它,而右子树中的所有关键字都大于它
  • 所有叶子节点都位于同一层,或者说根节点到每个叶子结点的长度都相同
    12062369-5e741d79b391c057.png
    B树

    1.1、翻译一遍:
  • 根节点不能为空,为空没法查找了
  • 每个节点最多有m-1个关键字,因为关键字有左右空隙可以长出树枝,m-1个关键字刚好能长出m个树枝
  • 非根节点至少有一半左1个关键字,再少的话增加深度,浪费空间,再多的话调整旋转的时候就比较麻烦,相当于一个权衡
  • 同一节点关键字按序存储,左空隙的枝子都小,右空隙的枝子都大
  • 所有叶子节点位于同一层,保证查找稳定
    1.2、B树中数据的解释
  • 每个节点存储了关键字key和关键字对应的数据data以及孩子节点的指针
  • 把一个key和其对应的data称为一个记录
  • 数据库应用中key表示键,data表示这个键对应的条目在硬盘上的逻辑地址
  • 一般应用中B树的阶数m大于100

2、增删改查

2.1、插入
以5阶B树为例
a)在空树中插入39,此时根节点就1个key,根节点也是叶子结点


b)继续插入22,97和41,根节点有4个key


c)继续插入53,插入后大于5-1,此时以中间key 41为中心开始分裂仪式,分裂后小于它的在左孩子,大于它的在右孩子。


d)依次插入13,21,40,同样会造成分裂,结果如下图所示。


e)依次插入30,27, 33 ;36,35,34 ;24,29,结果如下图所示。


f)插入key值为26的记录,插入后的结果如下图所示。


当前结点需要以27为中心分裂,并向父结点进位27,然后当前结点指向父结点,结果如下图所示。


进位后导致当前结点(即根结点)也需要分裂,分裂的结果如下图所示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值