Appearance
题目
假设二叉树中节点权值为 a=1, b=2, c=4, d=5, e=8, f=10, g=12。当带权路径长度 (WPL) 最小时,与节点 e(权值 8)处于相同深度的节点是哪些?
错因
A
只看到 d 也比较"小"就以为它和 e 同深度。实际上构造哈夫曼时,d=5 与"abc 子树根 7"合并形成 12,而 e=8 是直到第 5 步才与 f=10 合并形成 18——d 在二叉树里被"埋"得更深,跟 e 不在同一层。
B
只识别出 g=12 与 e 同层就停止思考了,漏掉了 f=10。e 和 f 是第 5 步直接合并出来的兄弟,它们必然同层;选 B 的人没有把"哪些叶子在最后两步才被合并进去"这条主线理清。
C
把 d 和 e 当成同层的同时承认 f 同层,问题在 d——d 在第 3 步就和"abc 子树根"合并掉了,比 e、f 早两步进入树。早合并意味着深度更深(先出现就一直在底部往上抬),所以 d 比 e 深,不和 e 同层。
总解析
哈夫曼构造(每次取最小两数合并,把它们作为新结点的左右孩子):
| 步 | 取出两数 | 合并出 | 当前森林中的根(权值) |
|---|---|---|---|
| 0 | — | — | 1(a), 2(b), 4(c), 5(d), 8(e), 10(f), 12(g) |
| 1 | 1, 2 | 3[ab] | 3, 4(c), 5(d), 8(e), 10(f), 12(g) |
| 2 | 3, 4 | 7[abc] | 5(d), 7, 8(e), 10(f), 12(g) |
| 3 | 5, 7 | 12[abcd] | 8(e), 10(f), 12, 12(g) |
| 4 | 8, 10 | 18[ef] | 12, 12(g), 18 |
| 5 | 12, 12 | 24[abcdg] | 18, 24 |
| 6 | 18, 24 | 42[根] | 42 |
画出最终哈夫曼树(根记为深度 0):
42
/ \
18 24
/ \ / \
e f 12 g
/\
d 7
/\
3 c
/\
a b逐叶子核对深度:
| 叶子 | 权值 | 深度 |
|---|---|---|
| a | 1 | 5 |
| b | 2 | 5 |
| c | 4 | 4 |
| d | 5 | 3 |
| e | 8 | 2 |
| f | 10 | 2 |
| g | 12 | 2 |
与 e 同深度(深度 2)的叶子是 f 和 g。
最终答案是 D。