#include
#include
#define MAXSIZE 50
typedef struct{
int weight;//结点权值
char c;//结点表示的字符
int parent,lchild,rchild;//左右孩子和父亲节点
}HTNode,*HuffmanTree;
void Select(HuffmanTree HT,int n,int*x1,int*x2)
{
int min1=99999;
int min2=min1;//定义两个变量用来存权值最小和第二小的结点
for(int i=1;i<=n;i++)
{
if(HT[i].weight';//根结点没有编码;
for(int i=1;i<=n;i++)
{ int pos=i;//pos记录当前编码的结点
int start=n-1;
int parent=HT[pos].parent;
while(parent!=0)//当前结点还有父亲节点
{
if(pos==HT[parent].lchild)
s[start-1]='0';
else
s[start-1]='1';
start--;
pos=HT[i].parent;
parent=HT[parent].parent;
}
HC[i-1]=new char[n-start];
strcpy(HC[i-1],&s[start]);
}
delete s;
}
void PrintHuffmancode(HuffmanTree HT,char **HC,int index)
{
if(index>=1)
{
if(HT[index].lchild==0&&HT[index].rchild==0)//判断是否为叶子节点
{
printf("%c:%s\n",HT[index].c,HC[index -1]);
return ;
}
}
PrintHuffmancode(HT,HC,HT[index].lchild);
PrintHuffmancode(HT,HC,HT[index].rchild);
}//先序输出叶子结点对应编码
void Translatecode(HuffmanTree HT,char **HC,char*s1,int n,int len1)
{
for(int i=0;i
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)