C语言给定权值{A:5,B: 29,C: 7,D: 8,E: 14,F: 23,G: 3,H: 1}建立哈夫曼树,输出哈夫曼编码:对上述给定的哈夫曼树及得到的哈夫曼编码,试输入一串二进制编码,输出它的哈夫曼译码。“
时间: 2024-05-04 21:22:19 浏览: 107
根据给定的n个权值构造哈夫曼树。通过遍历此二叉树完成哈夫曼编码。
4星 · 用户满意度95%
先根据给定的权值建立哈夫曼树。首先,选取权值最小的两个节点G和H,合并成一个节点GH,其权值为4(3+1),得到如下树:
```
GH
/ \
G H
```
然后,选取权值最小的两个节点A和C,合并成一个节点AC,其权值为12(5+7),此时得到如下树:
```
AC
/ \
A C
/ \ / \
G H D E
```
接着,选取权值最小的两个节点AC和D,合并成一个节点ACD,其权值为20(12+8),得到如下树:
```
AC
/ \
A C
/ \ / \
G H D E
/
C
\
D
```
继续合并,选取权值最小的两个节点E和ACD,合并成一个节点ACDE,其权值为34(20+14),得到如下树:
```
AC
/ \
A C
/ \ / \
G H D E
/ \
C ACD
\ / \
D E G H
```
再次合并,选取权值最小的两个节点ACDE和B,合并成一个节点ACDEB,其权值为63(34+29),得到如下树:
```
ACDEB
/ \
AC B
/ \ /
A C B
/ \ / \ / \
G H D E CDE 29
/ \
C ACD
\ / \
D E G H
```
根据哈夫曼树,可以得到以下哈夫曼编码:
```
A: 000
B: 11
C: 001
D: 010
E: 01
F: 10
G: 0000
H: 0001
```
接下来,如果输入一串二进制编码,比如110001001011010101,则可以根据哈夫曼树和编码进行译码。从根节点开始,如果遇到0则向左走,如果遇到1则向右走,直到走到叶节点为止。例如,输入的编码110001001011010101可以译码为“BACFG”。
阅读全文