B-树与B+树

539 阅读2分钟

B-树

B-树即B树,没有区别

基本性质

m阶B树:

  1. 每个节点至多m个儿子
  2. 根节点至少2个儿子
  3. 除根节点外,每个节点至少ceil(m/2)个孩子,至多m个孩子(<=>至少ceil(m/2)-1个关键字,至多m-1个关键字)
  4. 所有叶子结点在同一层中

插入操作

  1. 在终端节点插入
  2. 节点关键码数<m个直接插入
  3. 插入后若关键码个数 = m,则以第ceil(m/2)为中心分裂为2个节点,同时第ceil(m/2)个节点向父节点合并,向上合并是因为必须保证叶子节点都在同一层中
  4. 若父节点关键码个数 = m, 则继续对父节点进行分裂、往上合并操作
  5. 若到达根节点时仍需要分裂、往上合并,则B树层数+1

删除操作

删除的值在终端节点

  1. 终端节点关键值数量>ceil(m/2)-1:直接删除
  2. 终端节点关键值数量=ceil(m/2)-1,但兄弟节点关键值数量>ceil(m/2)-1:从兄弟节点借关键值,兄弟节点一个关键值并入父节点,同时父节点的一个关键值并入本节点
  3. 终端节点及其兄弟节点关键值数量均=ceil(m/2)-1:直接从父节点借关键值

删除的值不在终端节点

讲它与它的后继交换位置,即转换为前一种情况

B+树

基本性质

和B-树基本相同,区别:

  1. k个关键字的节点有k课子树,父节点每个关键字 = 每个子节点最大关键字
  2. 中间节点不保存数据,只用来索引
  3. 叶子节点包含全部元素的信息,并保留指向这些元素的指针
  4. 叶子节点从小到大形成链表

相比B-树的优势

  1. 中间节点不保存数据,只作为索引,同样的大小的磁盘也可容纳更多节点(空间上),同时IO次数更少(时间上)
  2. B-树查找性能不稳定,B+树查找成功一定在叶子节点
  3. 范围查询,B-树必须用类似中序遍历的方法,B+树直接通过叶子节点的链表指针