

第 8 题:哈夫曼树如何合并两个最小节点
考点分析
本题考察对哈夫曼树构建过程中节点合并机制的理解,特别是新节点的属性及存储位置。
正确答案:A
1. 核心数据结构
Node 结构体(树节点)
struct Node {
long long w; // 权值(频率)
int l, r; // 左右孩子(下标)
int sym; // 叶子:符号下标;内部节点:-1
};
| 节点类型 | sym |
|---|---|
| 叶子节点 | ≥ 0 |
| 内部节点 | -1 |
leafIdx(A 队列)
vector<int> leafIdx;
存放原始字符对应的叶子节点下标。初始已排序,仅用于最初的叶子节点。
internalIdx(B 队列)
vector<int> internalIdx;
存放合并产生的新节点(内部节点)下标。
2. 哈夫曼算法流程
- 找到当前权值最小的两个节点。
- 合并成一个新父节点。
- 新节点属性:
- 权值 = 两个孩子权值之和
- 左右孩子 = 这两个节点
- 不是叶子节点
- 将新节点放入内部节点队列。
- 重复直到只剩一个根节点。
3. 关键代码实现
int x = PopMinNode(...);
int y = PopMinNode(...);
z = ()nodes.();









