实验题:构造哈夫曼树生成哈夫曼编码
编写一个程序,构造一棵哈夫曼树,输出对应的哈夫曼编码和平均查找长度,并对下表(所示的数据进行验证。
单词及出现的频度
单词: The of a to and in that he is at on for His are be
频度 :1192 677 541 518 462 450 242 195 190 181 174 157 138 124 123
#include <iostream>
#define N 50
#define M 2*N-1
using namespace std;
//哈夫曼树结点定义
typedef struct
{
string data;
double weight;
int parent;
int lchild;
int rchild;
}HTNode;
//哈夫曼编码结点定义
typedef struct
{
char cd[N];
int start;
}HCode;
//创建哈夫曼树
void CreateHT(HTNode ht[], int n)
{
int i, k, lnode, rnode;
double min1, min2;//min1用于记录较小的那个结点,min2记录较大的那个
for (i = 0; i < 2 * n - 1; i++)//初始化结点
{
ht[i].parent = ht[i].lchild = ht[i].rchild = -1;
}
for (i = n; i < 2 * n