Skip to content

2026年 408 数据结构 第 4 题

数据结构2026年选择题2分

题目

森林 F 中有 5 颗树,其节点个数分别为 2、3、4、5、7,森林中树的次序可以任意,问 F 对应的二叉树最小高度为多少?

错因

A

把森林全部 21 个节点笼统地当成一棵能任意构造的二叉树,套 。完全忽略了"孩子兄弟法"的硬约束——森林转二叉树时,森林中树的次序会形成一条右链,每棵树只能挂在右链上的固定一格。哪怕节点总数允许,单次合并出来的"满二叉树"形态也是不可达的。

C

虽然意识到要按次序排树,但排错了方向:按节点数升序(2,3,4,5,7)放到位置 1..5。这样把高的树(h=4)放到了偏移大的末尾位置(i-1=3、4),导致最大代价 h_i + (i-1) = 4+4 = 8。"大树往后排"是反着的——必须降序。

D

完全没把每棵树转二叉树的过程做"压缩",把每棵树都按链式结构(节点数即高度)参与计算,几棵相加得到 10 量级的虚高数字。忽略了关键事实:每棵 m 节点的树自身可以选最优结构,让转出的二叉树高度只到

总解析

关键事实 1(单棵树):森林转二叉树用孩子兄弟法——单棵 m 节点树转出的二叉树根没有右孩子(因为根没有兄弟),左子树包含其余 m-1 个节点。这左子树是任意 m-1 节点的二叉树,原树结构可自选 → 左子树最小高度 = 。所以单棵 m 节点树转二叉树的最小内部高度

代入题中 5 个节点数:

m23457
h(m)23344

关键事实 2(多棵树串联):森林 转二叉树, 的根处于二叉树的层 (第一棵的根在层 1,第二棵的根在层 2 即第一棵根的右孩子,依次类推)。所以每棵树对总高度的"贡献" = ,森林二叉树总高度

关键事实 3(排序使 max 最小):要让 max 最小,把 大的树放到 小的位置(贪心地"先消耗大头")。本题 列表 = {4, 4, 3, 3, 2},降序排到位置 1…5

位置 i12345
h44332
(i-1)+h45566

最大值 = 6

(验证一下别的排法:升序 2,3,3,4,4 给出 max = 2,4,5,7,8 → 8;中间打乱也不会比 6 更小。)

最终答案是 B

最后更新:

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

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