B树和B+树

1. 什么是B树/B-树?

1.1 名称误区

此部分参考1

B树,即B-tree树,B是Balanced首字母,平衡的意思。

因为B树的原英文名称为B-tree,很多人喜欢把B-tree译作B-树,然后读作B减树。

其实,这么是不对的。

容易让人会以为B树和B-树是两种树。

特此声明:B-树就是指的B树。

1.2 概念

此部分参考2

B树是一种自平衡树数据结构。

m阶B树是满足以下性质的树:

  1. 有根节点、内部节点3、叶子节点4三种节点。
  2. 每个节点最多有m个子节点。
  3. 每个内部节点至少有 ⌈ m /2⌉ 个子节点。 5
  4. 每个非叶节点至少有两个子节点。6
  5. 所有叶子都出现在同一水平面上。7
  6. 具有k个子节点的非叶节点包含k -1 个键。8
    参考图片
    以上图片为引用图。9

B树属于多叉树、平衡多路查找树(查找路径不止两个)。

1.3 插入

此部分参考9

插入操作是指插入一条记录,即(key, value)的键值对。

  1. 如果B树中已存在需要插入的键值对,则用需要插入的value替换旧的value。
  2. 若B树不存在这个key,则一定是在叶子结点中进行插入操作10
    1)根据要插入的key的值,找到叶子结点并插入。
    2)判断当前结点key的个数是否小于等于m-1,若满足则结束,否则进行第3步。
    3)以结点中间的key为中心分裂成左右两部分,然后将这个中间的key插入到父结点中,这个key的左子树指向分裂后的左半部分,这个key的右子支指向分裂后的右半部分,然后将当前结点指向父结点,继续进行第3步。

1.4 删除

未完待续。

1.5 B树在数据库的应用

主要用于索引结构(还没深入了解)。

2.B+树

该部分参考教材11

2.1 概念

  1. 基础还是一颗B树。
  2. 数据只字叶子节点上有,非叶子节点的指针指向的是子节点的地址。
  3. 叶子节点最多包含m-1个指向数据的指针(与m-1个关键字对应),及1个指向含下一个关键字记录的指针12
  4. 非叶子节点(索引节点)的第一个关键字对应第二个指针所指子树,第二个关键字对应第三个指针所指子树,每个关键字等于对应子树的叶子节点中最小的关键字13
  5. 除根节点外,其他所有节点中所含关键字的个数最少有 ceil(m/2)(注意:B 树中除根以外的所有非叶子节点至少有 ceil(m/2) 棵子树)。(还没搞懂)

在这里插入图片描述

2.2 插入

直接看教材11

注:下例的m=4,其中的根节点关键字13是被分裂时顶上去的,没分裂前他在没分裂的第二层的第二个的位置。
在这里插入图片描述

2.3 删除

未完待续。


  1. 参考博文 ↩︎

  2. 维基百科定义 ↩︎

  3. 内部节点(internal node):存储了数据以及指向其子节点的指针。 ↩︎

  4. 叶子节点(leaf node):与内部节点不同的是,叶子节点只存储数据,并没有子节点。 ↩︎

  5. 内部节点的子节点最少的时候是才被分裂出来的时候。让我们想象一个节点要分裂了,即在包含了m-1个键(m个子节点)时由被顶了一个键上来(一个子节点分裂了,变成m+1个子节点了):若m为奇数(以5为例),该节点有6个子节点,平均分配到一边3个√;若m为偶数(以4为例),该节点有5个子节点,分配到一边2个,一边3个√。 ↩︎

  6. 内部节点都是分裂出来的。 ↩︎

  7. 了解了构造方式自然就懂了。 ↩︎

  8. 每个内部节点的键充当分隔其子树的分隔值。例如,如果一个内部节点有 3 个子节点(或子树),那么它必须有 2 个键:a1和a2↩︎

  9. 参考博文 ↩︎ ↩︎

  10. 不会直接在非叶子节点的关键字处插入,非叶子节点的关键字都是被分裂时顶上来的。 ↩︎

  11. 参考教材 ↩︎ ↩︎

  12. B+ 树为了方便范围查询,叶子节点之间还用指针串联起来。 ↩︎

  13. 这是插入方式决定的,但也符合B+树的目的:小于该关键字的去这个关键字左边子树找,大于等于该关键字的去这个关键字右边子树找。 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值