B-树基础概念
B-树是一种平衡的多路查找树,通常用于数据库和文件系统的索引结构。它通过增加每个节点的关键字数量来减少树的高度,从而显著降低磁盘 I/O 次数。
核心特性
- 根节点:至少有两个孩子(除非它是叶子节点)。
- 非根节点:至少有
ceil(M/2) - 1个关键字,至多有M - 1个关键字,且按升序排列。 - 子节点数:每个非根节点至少有
ceil(M/2)个孩子,至多有M个孩子。 - 区间约束:关键字
key[i]和key[i+1]之间的子树值介于两者之间。 - 平衡性:所有叶子节点都在同一层,通过分裂和合并保持平衡。
插入操作分析
以 M=3 的 B-树为例,每个节点最多存 2 个关键字。为了方便理解,我们允许节点在插入第三个关键字时暂时存储,随后立即触发分裂。
插入流程
假设我们要插入序列 [53, 139, 75, 49, 145, 36, 101]。
- 初始插入:若树为空,直接创建根节点。
- 查找位置:从根节点向下遍历,找到合适的叶子节点位置。注意,B-树的插入一定发生在叶子节点。
- 插入元素:在找到的节点中按顺序插入新关键字。
- 检查溢出:如果节点关键字数量达到上限(M),则必须分裂。

当节点满员时,我们需要将中间关键字提升到父节点,剩余部分分裂成两个新节点。如果父节点也满了,这个过程会递归向上,直到根节点分裂或不再需要分裂。

Java 模拟实现
下面给出完整的 Java 代码实现。为了清晰展示逻辑,我们将辅助类 Pair 和主类 MyBtree 分开定义。
数据结构定义
public class Pair<K,V> {
private K key;
private V val;
public Pair(K key, V val) {
this.key = key;
this.val = val;
}
K { key; }
{ .key = key; }
V { val; }
{ .val = val; }
}





