|  | 
 
 发表于 2022-7-4 12:37:58
|
显示全部楼层 
| 我把我的哈夫曼编码建树的代码放下面你看一下大概就可以理解了~ 
 typedef struct
 {    char ch;
 int weight;
 int parent,lchild,rchild;
 }HTNode,*HuffmanTree;
 void CreatHuffmanTree(HuffmanTree & HT, int n)
 {
 HT = (HuffmanTree)malloc(sizeof(HTNode) * (2*n+2));
 for (int i = 1; i <= n; i++)
 {
 cin >> (HT + i)->ch >> (HT + i)->weight;
 (HT + i)->parent = 0;
 }
 int i, j = 0, m1, n1, p;
 HuffmanTree s1=NULL, s2=NULL, P=NULL;
 while (j < n - 1)
 {
 int x = 0;
 for (i = 1; i <= n + j; i++)
 {
 if ((HT+i)->parent == 0)
 
 {
 if (x == 1)
 {
 s2 = (HT+i);
 n1 = i;
 break;
 }
 if (x == 0)
 {
 s1 = (HT + i),
 x++;
 m1 = i;
 }
 }
 }
 if (s2->weight < s1->weight)
 {
 P = s2, p = n1;
 s2 = s1, n1 = m1;
 s1 = P, m1 = p;
 }
 i++;
 for (i; i <= n + j; i++)
 {
 if (HT[i].parent == 0)
 {
 if (HT[i].weight < s2->weight)
 s2 = (HT + i), n1 = i;
 
 if (s2->weight < s1->weight)
 {
 P = s2, p = n1;
 s2 = s1, n1 = m1;
 s1 = P, m1 = p;
 }
 }
 }
 
 HT[n + j+1].weight = HT[m1].weight + HT[n1].weight;
 HT[n + j+1].lchild = m1;
 HT[n + j+1].rchild = n1;
 HT[n + j+1].parent = 0;
 HT[m1].parent = HT[n1].parent = n + j+1;
 j++;
 }
 }
 | 
 |