Skip to content

2021年 408 数据结构 第 9 题

数据结构2021年选择题2分

题目

在一棵高度为 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):

最少最多
非根非叶结点的孩子数
非根非叶结点的关键字数
根(非叶)的孩子数23
根(非叶)的关键字数12

孩子数与关键字数的恒等关系:每个非叶结点 孩子数 = 关键字数 + 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 层贡献结点数)
结点 123
结点 212
结点 312
合计47

第五步:累加

结点数
第 1 层(根)1
第 2 层3
第 3 层7
总计11

最终答案是 A(11)

小结:B 树"最多"题的关键不在于关键字数最多,而在于让上层结点孩子数最多,从而让下层结点数最多。结构示意:

            ┌── 根 (2 关键字, 3 孩子) ──┐
        ┌───┴───┐    │     ┌───┴───┐
       (2 关键字)  (1 关键字)  (1 关键字)
        / | \      / \        / \
       3 子叶    2 子叶     2 子叶  (第 3 层共 7 叶)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数