Appearance
题目
在一棵高度为 3 的 3 阶 B 树中,根为第 1 层,若第 2 层中有 4 个关键字,则该树的结点个数最多是( )。
错因
B
第 3 层结点数算漏 1。正确路径是第 2 层 3 个结点(关键字分布 2+1+1=4),各自对应 3, 2, 2 个孩子,共 7 个第 3 层结点。选 B 的人可能误把某个 1 关键字结点的孩子数算成 1(少算 1),得 3+2+1=6,再加 1+3=4 总共 10。问题在于:m 阶 B 树中结点的孩子数 = 关键字数 + 1,1 关键字必须对应 2 孩子。
C
没意识到第 2 层可以有 3 个结点。本题最关键的"放最多结点"决策点是:让第 2 层关键字 4 个尽量分散到更多结点——根能有 3 个孩子(最多),3 个孩子放 4 个关键字 → 2+1+1。选 C 的人按"关键字尽量挤在少结点"考虑,把第 2 层算成 2 个结点(每个 2 关键字),第 3 层最多 2×3=6 个结点,总 1+2+6=9。求"最多"应反过来——结点越多越好。
D
双重失误。既把第 2 层算成 2 结点,又把第 3 层从 6 漏算到 5(或 1+3+4=8)。常见情形:把"3 阶 B 树"的最多孩子数误记为 m−1=2 而不是 m=3,导致第 3 层最多孩子数被压低。"3 阶"指 m=3,每结点最多 m=3 个孩子、最多 m−1=2 个关键字——前者是 3 不是 2。
总解析
第一步:明确 3 阶 B 树的约束。
m 阶 B 树(m=3):
| 项 | 最少 | 最多 |
|---|---|---|
| 非根非叶结点的孩子数 | ||
| 非根非叶结点的关键字数 | ||
| 根(非叶)的孩子数 | 2 | 3 |
| 根(非叶)的关键字数 | 1 | 2 |
孩子数与关键字数的恒等关系:每个非叶结点 孩子数 = 关键字数 + 1。
第二步:贪心思路——求"最多结点"如何分配。
要让总结点数最多 ⟺ 让每一层结点数最多 ⟺ 让上层结点的孩子数尽量多。 而上层结点的孩子数 = 该结点的关键字数 + 1——所以不能简单"每结点关键字最多",要平衡两个目标。
第三步:第 1 层(根)和第 2 层的分配。
题目给定第 2 层关键字总数 = 4。
- 选项 A:根 2 关键字 → 3 个孩子(第 2 层 3 结点)。这 3 结点关键字总和 = 4,分布 2+1+1。
- 选项 B:根 1 关键字 → 2 个孩子(第 2 层 2 结点)。这 2 结点关键字总和 = 4,分布 2+2。
要让总结点数最多,第 2 层结点越多越好 → 选 A:根 2 关键字、第 2 层 3 结点(2+1+1)。
第四步:第 3 层的最多结点数。
第 2 层 3 个结点,孩子数等于自身关键字数 + 1:
| 第 2 层结点 | 关键字数 | 孩子数(即第 3 层贡献结点数) |
|---|---|---|
| 结点 1 | 2 | 3 |
| 结点 2 | 1 | 2 |
| 结点 3 | 1 | 2 |
| 合计 | 4 | 7 |
第五步:累加。
| 层 | 结点数 |
|---|---|
| 第 1 层(根) | 1 |
| 第 2 层 | 3 |
| 第 3 层 | 7 |
| 总计 | 11 |
最终答案是 A(11)。
小结:B 树"最多"题的关键不在于关键字数最多,而在于让上层结点孩子数最多,从而让下层结点数最多。结构示意:
┌── 根 (2 关键字, 3 孩子) ──┐
┌───┴───┐ │ ┌───┴───┐
(2 关键字) (1 关键字) (1 关键字)
/ | \ / \ / \
3 子叶 2 子叶 2 子叶 (第 3 层共 7 叶)