哈夫曼编码
- 字符都有ASC2码,长度一样,占用空间一样。根据字符使用频率编码可以省空间,就是哈夫曼编码。
- 统计每个字符出现的频率,插入队列中。
- 降序排序该队列。
- 取出最小的两个节点合并成父节点插入队列里。该两节点和父节点形成一个二叉树。
- 重复3、4过程,使队列仅剩一个节点。该节点是最后的根,前面生成的二叉树都是该二叉树的节点。
- 叶子节点就是字符。
- 左树0,右树1,从根到叶子节点就会生成由0、1组成的码,就是哈夫曼编码,
队列生成二叉树过程

生成的哈夫曼编码

代码
#include <bits/stdc++.h>
using namespace std;
string s=“All roads lead to Rome.”;
int sl;//输入字符串长度
//根据每个字符出现的频率,生成对应的哈夫曼编码
struct node{
char c;//字符
int cx,d;//字符ASC2值和出现的频率
string s,s1;//哈夫曼编码和合并后的字母
node *fa,*left,*right;//父和左右子树
node(){//无参数初始化
d=0,s=s1=“”;
left=right=fa=NULL;
}
node(char x)

最低0.47元/天 解锁文章
9205

被折叠的 条评论
为什么被折叠?



