程序初始化哈夫曼树的过程是怎样的,能否举例说明
时间: 2024-12-12 11:20:04 浏览: 4
程序初始化哈夫曼树的过程包括以下步骤:
1. **读取字符数**:首先,程序会提示用户输入字符的数量 `n`。
2. **分配内存**:然后,程序会动态分配一个大小为 `2n-1` 的 `HTNode` 数组来存储哈夫曼树的节点信息。其中,前 `n` 个节点用于存储用户输入的字符及其权重,后 `n-1` 个节点用于存储生成的内部节点。
3. **输入字符和权重**:程序会提示用户依次输入每个字符及其对应的权重,并将其存储在数组的前 `n` 个位置。
4. **初始化节点信息**:对于每个节点,初始化其父节点、左孩子和右孩子的索引为 0。
5. **构建哈夫曼树**:调用 `HuffmanCoding` 函数,该函数通过选择权重最小的两个节点并合并它们来逐步构建哈夫曼树。
6. **保存信息**:最后,程序将哈夫曼树的信息保存到文件 `hfmTree.txt` 中。
### 示例说明
假设用户输入了以下字符及其权重:
- 字符:A, B, C, D
- 权重:7, 5, 2, 4
#### 步骤 1:读取字符数
用户输入字符数 `n = 4`。
#### 步骤 2:分配内存
程序分配一个大小为 `2*4-1 = 7` 的 `HTNode` 数组。
#### 步骤 3:输入字符和权重
用户依次输入字符和权重:
- A (7)
- B (5)
- C (2)
- D (4)
数组 `HT` 的前 4 个位置初始化如下:
```
HT[1] = {'A', 7, 0, 0, 0}
HT[2] = {'B', 5, 0, 0, 0}
HT[3] = {'C', 2, 0, 0, 0}
HT[4] = {'D', 4, 0, 0, 0}
```
#### 步骤 4:初始化节点信息
所有节点的 `parent`, `lchild`, 和 `rchild` 都初始化为 0。
#### 步骤 5:构建哈夫曼树
调用 `HuffmanCoding` 函数,逐步构建哈夫曼树:
1. 选择权重最小的两个节点 `C` 和 `D`,创建新节点 `5`,权重为 `2 + 4 = 6`。
```
HT[5] = {'0', 6, 0, 3, 4}
HT[3].parent = 5
HT[4].parent = 5
```
2. 选择权重最小的两个节点 `B` 和 `5`,创建新节点 `6`,权重为 `5 + 6 = 11`。
```
HT[6] = {'0', 11, 0, 2, 5}
HT[2].parent = 6
HT[5].parent = 6
```
3. 选择权重最小的两个节点 `A` 和 `6`,创建新节点 `7`,权重为 `7 + 11 = 18`。
```
HT[7] = {'0', 18, 0, 1, 6}
HT[1].parent = 7
HT[6].parent = 7
```
最终的哈夫曼树如下:
```
HT[1] = {'A', 7, 7, 0, 0}
HT[2] = {'B', 5, 6, 0, 0}
HT[3] = {'C', 2, 5, 0, 0}
HT[4] = {'D', 4, 5, 0, 0}
HT[5] = {'0', 6, 6, 3, 4}
HT[6] = {'0', 11, 7, 2, 5}
HT[7] = {'0', 18, 0, 1, 6}
```
#### 步骤 6:保存信息
将上述信息保存到 `hfmTree.txt` 文件中。
通过这些步骤,程序成功地初始化并构建了哈夫曼树。
阅读全文