B-树
B-树即B树,没有区别
基本性质
m阶B树:
- 每个节点至多m个儿子
- 根节点至少2个儿子
- 除根节点外,每个节点至少ceil(m/2)个孩子,至多m个孩子(<=>至少ceil(m/2)-1个关键字,至多m-1个关键字)
- 所有叶子结点在同一层中
插入操作
- 在终端节点插入
- 节点关键码数<m个直接插入
- 插入后若关键码个数 = m,则以第ceil(m/2)为中心分裂为2个节点,同时第ceil(m/2)个节点向父节点合并,向上合并是因为必须保证叶子节点都在同一层中
- 若父节点关键码个数 = m, 则继续对父节点进行分裂、往上合并操作
- 若到达根节点时仍需要分裂、往上合并,则B树层数+1
删除操作
删除的值在终端节点
- 终端节点关键值数量>ceil(m/2)-1:直接删除
- 终端节点关键值数量=ceil(m/2)-1,但兄弟节点关键值数量>ceil(m/2)-1:从兄弟节点借关键值,兄弟节点一个关键值并入父节点,同时父节点的一个关键值并入本节点
- 终端节点及其兄弟节点关键值数量均=ceil(m/2)-1:直接从父节点借关键值
删除的值不在终端节点
讲它与它的后继交换位置,即转换为前一种情况
B+树
基本性质
和B-树基本相同,区别:
- k个关键字的节点有k课子树,父节点每个关键字 = 每个子节点最大关键字
- 中间节点不保存数据,只用来索引
- 叶子节点包含全部元素的信息,并保留指向这些元素的指针
- 叶子节点从小到大形成链表
相比B-树的优势
- 中间节点不保存数据,只作为索引,同样的大小的磁盘也可容纳更多节点(空间上),同时IO次数更少(时间上)
- B-树查找性能不稳定,B+树查找成功一定在叶子节点
- 范围查询,B-树必须用类似中序遍历的方法,B+树直接通过叶子节点的链表指针