C++哈夫曼树编码和译码的实现
作者:Dmego 发布时间:[ 2016/11/16 10:43:56 ] 推荐标签:C++ 哈夫曼树
78 /*-----------创建工作---------------------------*/
79 int s1,s2;
80 for (int i = n + 1; i <= m; ++i)
81 {//通过n-1次的选择,删除,合并来构造哈夫曼树
82 Select(HT, i - 1, s1, s2);
83 /*cout << HT[s1].weight << " , " << HT[s2].weight << endl;*/
84 /*将s1,s2的双亲域由0改为i
85 (相当于把这两个结点删除了,这两个结点不再参与Select()函数)*/
86 HT[s1].parent = i;
87 HT[s2].parent = i;
88 //s1,与s2分别作为i的左右孩子
89 HT[i].lchild = s1;
90 HT[i].rchild = s2;
91 //结点i的权值为s1,s2权值之和
92 HT[i].weight = HT[s1].weight + HT[s2].weight;
93 }
94 }
95
96 //从叶子到根逆向求每个字符的哈夫曼编码,储存在编码表HC中
97 void CreatHuffmanCode(HuffmanTree HT, HuffmanCode &HC, int n)
98 {
99 HC = new char*[n + 1];//分配储存n个字符编码的编码表空间
100 char *cd = new char[n];//分配临时存储字符编码的动态空间
101 cd[n - 1] = '