#include<iostream>
using namespace std;
#define leafNumber 20
#define totalNumber 39
#define maxValue 32767
typedef struct {
char data;
int weight;
int parent, lchild, rchild;
}HTNode;
typedef struct {
HTNode elem[totalNumber];
int num, root;
}HFTree;
void CreateHFTree(HFTree&HT, char value[], int fr[], int n)
{
int i, k, s1, s2, min1, min2;
for (i = 0;i < n;i++)
{
HT.elem[i].data = value[i];
HT.elem[i].weight = fr[i];
}
for (i = 0;i < leafNumber;i++)
{
HT.elem[i].parent = HT.elem[i].lchild = HT.elem[i].rchild = -1;
}
for (i = n;i < 2 * n - 1;i++)
{
min1 = min2 = maxValue;
s1 = s2 = 0;
for(k=0;k<i;k++)
if(HT.elem[i].parent==-1)
if (HT.elem[k].weight < min1)
{
min2 = min1;s2 = s1;
min1 == HT.elem[k].weight;
s1 = k;
}
else if (HT.elem[k].weight < min2)
{
min2 = HT.elem[k].weight;
s2 = k;
}
HT.elem[s1].parent = HT.elem[s2].parent = i;
HT.elem[i].lchild = s1;HT.elem[i].rchild = s2;
HT.elem[i].weight = HT.elem[s1].weight + HT.elem[s2].weight;
}
HT.num = n;HT.root = 2 * n - 2;
}
C++中Huffman树的结构定义和算法实现
最新推荐文章于 2022-01-05 08:21:29 发布