已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8、11试写出对应哈夫曼书HT存储的初态和终态。
时间: 2023-07-10 20:38:49 浏览: 63
霍夫曼编码,输入字符,然后给出对应字符的权值和编码,用窗口界面展现出来
5星 · 资源好评率100%
哈夫曼树是一种无序二叉树,用于编码和解码数据。它的构建过程是通过不断合并权值最小的两个节点来构建的。下面是根据给定权值构建哈夫曼树的过程。
1. 将所有字符的权值存储在一个数组中,并将每个字符看作一个只有权值的树。
```
字符: A B C D E F G
权值: 3 12 7 4 2 8 11
```
2. 从数组中选出权值最小的两个树,并将它们合并为一棵新树,新树的权值为两个子树的权值之和。将新树插入到数组中,并从数组中删除原来的两个子树,重复这个过程,直到数组中只剩下一棵树为止。
下面是根据给定权值构建哈夫曼树的过程:
```
字符: A B C D E F G
权值: 3 12 7 4 2 8 11
第一步:
1. 选出权值最小的两棵树:E和A。
2. 将E和A合并为一棵新树,其权值为5。
3. 数组变为:{5, B, C, D, F, G}
第二步:
1. 选出权值最小的两棵树:B和C。
2. 将B和C合并为一棵新树,其权值为19。
3. 数组变为:{19, D, F, G, 5}
第三步:
1. 选出权值最小的两棵树:D和F。
2. 将D和F合并为一棵新树,其权值为12。
3. 数组变为:{19, G, 12, 5, 19}
第四步:
1. 选出权值最小的两棵树:G和新树。
2. 将G和新树合并为一棵新树,其权值为30。
3. 数组变为:{30, 12, 5, 19}
第五步:
1. 选出权值最小的两棵树:12和新树。
2. 将12和新树合并为一棵新树,其权值为42。
3. 数组变为:{42, 5, 19}
第六步:
1. 选出权值最小的两棵树:5和新树。
2. 将5和新树合并为一棵新树,其权值为47。
3. 数组变为:{47, 19}
第七步:
1. 选出权值最小的两棵树:19和新树。
2. 将19和新树合并为一棵新树,其权值为66。
3. 数组变为:{66}
哈夫曼树构建完成,根节点的权值为66,其余节点的权值为字符的权值。
哈夫曼树初态和终态如下:
初态:
```
3(A)
/ \
E 12(B)
/ \
7(C) 4(D)
/ \
8(F) 11(G)
```
终态:
```
66
/ \
/ \
/ \
/ \
19 47
/ \ / \
D(C) G F 12(B)
/ \
E A
```
阅读全文