构造哈夫曼树的算法

①、编写哈夫曼树中每个节点结构;

②、构造哈夫曼树的算法;

③、编写一个存放每个节点哈夫曼编码的类型;

④、编写哈夫曼树求对应的哈夫曼编码的算法;

⑤、编写主函数。

代码如下:

#include
#include
#include
#include
//①:
typedef struct
{	char data;		
	float weight;
	int parent;		
	int lchild;		
	int rchild;		
} HTNode;
//②:
void CreateHT(HTNode ht[],int n)
{  int i,j,k,lnode,rnode; float 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-1;i++)		
   {  min1=min2=32767; lnode=rnode=-1;
	for (k=0;k<=i-1;k++)
	  if (ht[k].parent==-1)		
	  {  if (ht[k].weight

      对哈夫曼树的构造可以分一下几步,需要多做几个实验,才可以熟练的掌握。

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:

(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。


你可能感兴趣的:(数据结构)