用c++构建一个哈夫曼树

用c++构建一个哈夫曼树,有没有哪位大神可以帮助一下啊,拜托拜托,真的不会写,很着急

http://m.jb51.net/article/52684.htm

typedef struct
{
int w, l, r, p;
}Huffman;
void CreateHuffmanTree(Huffman **huff,int w[],int n)
{
Huffman *h = NULL;
int i,s1,s2;
*huff = (Huffman *)malloc(sizeof(Huffman)*2*n);
h = *huff;
//初始化
for (i = 1; i <= n; i++)
{
h[i].w = w[i - 1];
h[i].l = h[i].r = h[i].p = 0;
}
for (; i < 2 * n; i++)
{
h[i].w = 0;
h[i].l = h[i].r = h[i].p = 0;
}
for (i = n + 1; i < 2 * n; i++)
{
Search(h,&s1,&s2,i-1);//作业
h[i].w = h[s1].w + h[s2].w;
h[i].l = s1;
h[i].r = s2;
h[s1].p = h[s2].p = i;
}
}

void HuffmanCode(Huffman huff[],int n,char ***ch)
{
int i, j, f,start;
char code = NULL;
code = (char *)malloc(sizeof(char)*n);
code[n - 1] = '\0';
*ch = (char *
)malloc(sizeof(char )*n);
for (i = 1; i <= n; i++)
{
start = n - 2;
for (j = i, f = huff[i].p; f != 0; j = f, f = huff[f].p)
{
if (j == huff[f].l)
code[start--] = '0';
else
code[start--] = '1';
}
(*ch)[i] = (char *)malloc(sizeof(char)
(n-start-1));
strcpy((*ch)[i],&code[start+1]);
}
free(code);
}

还有编码的核心代码,框架的东西我就不说了

typedef struct
{
int w, l, r, p;
}Huffman;
void CreateHuffmanTree(Huffman **huff,int w[],int n)
{
Huffman *h = NULL;
int i,s1,s2;
*huff = (Huffman *)malloc(sizeof(Huffman)*2*n);
h = *huff;
//初始化
for (i = 1; i <= n; i++)
{
h[i].w = w[i - 1];
h[i].l = h[i].r = h[i].p = 0;
}
for (; i < 2 * n; i++)
{
h[i].w = 0;
h[i].l = h[i].r = h[i].p = 0;
}
for (i = n + 1; i < 2 * n; i++)
{
Search(h,&s1,&s2,i-1);//作业
h[i].w = h[s1].w + h[s2].w;
h[i].l = s1;
h[i].r = s2;
h[s1].p = h[s2].p = i;
}
}

void HuffmanCode(Huffman huff[],int n,char ***ch)
{
int i, j, f,start;
char code = NULL;
code = (char *)malloc(sizeof(char)*n);
code[n - 1] = '\0';
*ch = (char *
)malloc(sizeof(char )*n);
for (i = 1; i <= n; i++)
{
start = n - 2;
for (j = i, f = huff[i].p; f != 0; j = f, f = huff[f].p)
{
if (j == huff[f].l)
code[start--] = '0';
else
code[start--] = '1';
}
(*ch)[i] = (char *)malloc(sizeof(char)
(n-start-1));
strcpy((*ch)[i],&code[start+1]);
}
free(code);
}

还有编码的核心代码,框架的东西我就不说了