#include<stdio.h>
typedef struct{ //节点的结构
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表
//构造哈夫曼树,并求哈夫曼编码
HuffmanCode HuffmanCoding(HuffmanTree HT,HuffmanCode HC,int *w,int n){
HuffmanTree p;
int start;
unsigned f;
unsigned c;
char *cd;
int m,i,j,s1,s2,m1,m2;
if(n<=1)
return 0;
m = 2*n-1; //哈夫曼树共m个节点
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); /* 0号单元未用 */
for(p = HT+1,i=1 ;i<=n; ++i,++p,++w){ //从一号到n号开始填表格
(*p).weight = *w; //赋权值
(*p).parent = 0;
(*p).lchild = 0;
(*p).rchild = 0;
}
for(;i<=m;++i,++p)
(*p).parent = 0; //从i从n+1到m 其余的节点双亲都是0
//开始建造哈夫曼树
for(i=n+1;i<=m;++i){
s1=s2=0;
m1 = m2 = 10000;
for(j=1;j<=i-1;j++){
if(HT[j].weight<m1 &
哈夫曼树与哈夫曼编码
最新推荐文章于 2023-07-27 20:40:42 发布
该博客介绍了如何构建哈夫曼树并进行哈夫曼编码。内容包括根据节点数量输入构建过程,详细展示了如何找到最小两个节点进行合并,并最终得出各字符的哈夫曼编码。
摘要由CSDN通过智能技术生成