Appearance
题目
对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是( )。
错因
A
凭手感记成了"总结点数 = 2n + 3"或类似带额外修正项的公式,反推 n=56。本质是没掌握哈夫曼树是严格二叉树(无 1 度结点)这一关键性质,公式记错了。
B
把哈夫曼树误记为"n 个叶子 + n+1 个内部结点 = 2n+1",反推得 115 = 2n+1, n=57。常见混淆来源:把哈夫曼树和满二叉树混为一谈,但哈夫曼树的内部结点数是 n−1,不是 n+1。
D
没有意识到哈夫曼树必为严格二叉树,按一般完全二叉树用 之类的公式凑数;或者把 115 当作总结点数除以某个估算的"层比"得到 60。完全没用到哈夫曼树的结构性质。
总解析
哈夫曼树的关键性质:哈夫曼树是严格二叉树——除叶子外,每个内部结点都恰好有 2 个孩子,没有度为 1 的结点。
理由:哈夫曼算法每次从优先队列里取出权值最小的两棵子树,合并为一个新内部结点(权值 = 两子树权值之和)。所以每个内部结点都是"两个孩子合并"的结果,度恰好为 2。
总结点数公式:
设叶子数为 n(即 n 个符号),内部结点数为 i。严格二叉树有等式 n = i + 1,即 i = n − 1。
代入求解:
最终答案是 C。