/*---------------------------------------------------------------
任务过程:创建26个字母哈夫曼树,及其编码和译码
1、建立哈夫曼树
2、从每个叶结点回溯到root的路径,并记录路径,则为哈夫曼编码
3、查表方式获得每个字符的哈夫曼编码
-----------------------------------------------------------------*/
#include
#include
//----------------------定义结点数据---------------
#define N_LEAVE 26 //N个权值,则有N个叶结点,树共2N-1个结点
#define N_NODE (26*2-1)
typedef struct _Node
{
char character;
float weight;
int lchild;
int rchild;
int parent;
}Node,*pNode;
typedef struct _Code
{
int HufCode[N_LEAVE]; //叶节点最长编码位数应该为树的最长路径
int Start; //编码起始位(相对编码数组)
char Char; //编码的字符值
}Code,*pCode;
//--------------------------------------------------
//----------------------构造哈夫曼树----------------
void Huffman(Node Ht[],float Wt[])
{
int i,j,x1,x2;
float min1,min2;
//初始化结点数组Ht
for(i=0;i |