






















B-树是一种 多路平衡查找树。
在 B-树中,一个结点可以包含多个关键字,从而显著降低树的高度,减少磁盘 I/O 次数。
B-树中,所有结点的 最大孩子数 称为 B-树的 阶,用 m 表示,一般要求:
m ≥ 3
设结点中关键字个数为 n。
根结点
m − 1 个关键字非根结点
⌈m/2⌉ − 1 个关键字m − 1 个关键字n 个关键字的结点n + 1 个子树指针P0 | k1 | P1 | k2 | P2 | ... | kn | Pn
满足有序性:
P0 < k1 < P1 < k2 < ... < kn < Pn
示例:在 B-树中查找关键字 42
[30]
/ \
[15 26] [39 45 59]
\
[40 42 44]
查找路径:
30 → 39 → 42(查找成功)
对于 m 阶 B-树:
⌈m/2⌉ − 1 ≤ 关键字数 ≤ m − 1
当某结点关键字数达到 m:
⌈m/2⌉ 个关键字原结点:
[k1 k2 k3 k4 k5]
拆分后:
k3
/ \
[k1 k2] [k4 k5]
设最少关键字数为 ⌈m/2⌉ − 1
✔ 直接删除
✔ 通过父结点调整,从兄弟结点借关键字
[ b ]
/ \
[a c] [ d ]
调整后:
[ c ]
/ \
[a b] [ d ]
✘ 必须进行 结点合并
[ b ]
/ \
[ a ] [ c ]
合并后:
[ a b c ]
父结点关键字减少,可能继续向上合并。
步骤:
找该关键字的 相邻关键字
用相邻关键字替换原关键字
转化为终端结点删除问题
B+树是 B-树的一种重要变形,广泛应用于数据库索引与文件系统。
查找、插入、删除逻辑与B树类似,但插入/删除需保证叶结点链表的连续性,且分支结点的索引关键字需同步调整。
[50 | 96]
/ | \
[15|50] [62|78] [96]
| | |
-----------------------------------------
3 8 15 20 26 43 50 56 62 71 78 84 89 96
-----------------------------------------
[3 8] → [15 20] → [26 43] → [50 56] → ...
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。