Skip to content

2018年 408 数据结构 第 8 题

数据结构2018年选择题2分

题目

高度为 5 的 3 阶 B 树含有的关键字个数至少是( )

错因

A

把每层结点数累加但忘了考虑根的特殊规则,或者只算到第 4 层就停了。 看起来很顺手,但这只是 4 层的最小结点数。题目说高度为 5,叶层(第 5 层)也必须算进去——叶层最少 16 个结点,每个 1 个关键字,再加 16 才完整。

C

把每个结点的关键字数从最少算成了最多。3 阶 B 树每个结点关键字数 ,每层结点数最少时是 每个结点最少 1 个关键字。如果错误地把每个非根结点的关键字数算成 2,就会得到 ,再凑成 62。本质是把"最少结点数"和"最多关键字数"两个极端混搭了。

D

用了"满 m 叉树"的总叶数公式 之类的指数估算( 减 1 = 242,或别的指数凑数)。这是把 B 树和"高为 h 的满 m 叉树"等同起来,得到的反而是最多而非最少;并且 3 阶 B 树每个结点最多 3 个孩子但只有 2 个关键字,242 这种数量在最少场景下完全不可能。

总解析

B 树的两条最少结点规则(设阶数 ):

  • 根结点:若树非空且不是单结点,则至少 2 个孩子(即 1 个关键字);
  • 非根非叶结点:至少 个孩子(1 个关键字);
  • 每个结点的关键字数:至少 个。

关于"高度"的口径:本题用王道/天勤经典口径——高度 = 包含叶层在内的总层数(即从根到最深叶的层数),所以高度 5 = 共 5 层,从第 1 层(根)到第 5 层(叶)。

让结点尽量少 ⇔ 让每个结点都按"下限"放孩子

该层最少结点数每个结点最少关键字该层关键字合计
第 1 层(根)111
第 2 层12
第 3 层14
第 4 层18
第 5 层(叶)116
合计3131

每层结点数翻倍是因为每个结点最少有 2 个孩子。每个结点又只有 1 个关键字(下限),所以总关键字数 = 总结点数 =

也可以用等比数列直接写:

最终答案是 B(31)

最后更新:

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

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