数据结构 Huffmantree哈夫曼树

我正在学数据结构,在写哈夫曼代码的时候出现了点问题
输入和生成哈夫曼树都是没问题的,但是执行程序中无法输出哈夫曼代码(HuffmanCode)不知道是在生成HuffmanCode时出了问题还是在最后输出HuffmanCode时出了问题

typedef struct{
 int weight;
 int parent;
 int lchild;
 int rchild;
}HTNode,*HuffmanTree;
//定义Huffmantree结构

typedef char**HuffmanCode;
void CreateHuffmanTree(HuffmanTree *HT,int n);
void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int n);
void Select(HuffmanTree HT,int m,int *s1,int *s2); 
void outHuffmanTree(HuffmanTree HT,int n);
void outHuffmanCode(HuffmanCode HC,int n);
#include
#include
#include<string.h>

int main(){
 int n;
 HuffmanTree HT;
 HuffmanCode HC;
 printf("下面进行huffmantree的创建\n请输入你想要输入的结点个数:\n");
 scanf("%d",&n);
 CreateHuffmanTree(&HT,n);
 printf("创建Huffman tree完成\n");
 outHuffmanTree(HT,n);
 void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int n);
 outHuffmanCode(HC,n);
 printf("创建Huffman Code完成\n");
 return 0;
}
//主程序

void CreateHuffmanTree(HuffmanTree *HT,int n){
 if(n<=1)
  return;
 int i;
 int s1,s2;
 *(HT)=(HTNode*)malloc(2*n*sizeof(HTNode));//huffmantree有其他辅助结点 
 for(i=0;i<=2*n;i++){
  (*HT)[i].lchild=0;(*HT)[i].parent=0;(*HT)[i].rchild=0; 
 }
 printf("请输入这n个结点的weight:"); 
 for(i=1;i<=n;i++)
  scanf("%d",&(*HT)[i].weight);
 for(i=n+1;i<2*n;i++)
{  
  Select(*HT,i-1,&s1,&s2);
  (*HT)[i].weight=(*HT)[s1].weight+(*HT)[s2].weight;
  (*HT)[s1].parent=i;
  (*HT)[s2].parent=i;
  (*HT)[i].lchild=s1;
  (*HT)[i].rchild=s2;
 }
}
//生成Huffmantree

void Select(HuffmanTree HT,int m,int *s1,int *s2){//从这m个数里边选择最小的2个//把第一个进行标记就ok 
 int i;//从下标为1的位置开始计数 
 //int min=HT[1].weight;这里直接赋值不合理,假如第一次那个1就是最小被选选中,那么第2次还是被选中 
 int min1=1000; 
 int min2=1000;//规定一个特别大的数 
 for(i=1;i<=m;i++){
  if(HT[i].parent==0&&min1>HT[i].weight){
   min1=HT[i].weight;
   *s1=i;
  }
 }
 for(i=1;i<=m;i++){
  if(i!=(*s1)&&HT[i].parent==0)
   if(HT[i].weight[i].weight;
    *s2=i;
   } 
 } 
}
//选择最小的两个叶子节点


void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int n){
    HC=(HuffmanCode)malloc((n+1)*sizeof(char));
    char cd[n-1];
    cd[n-1]='\0';
    int i,start,parent,c;
    for(i=1;i<=n;i++)
    {
        start=n-1;parent=HT[i].parent;c=i;
        while(parent!=0)
        {    
            start--;
            if(HT[parent].lchild==c) cd[start]='0';
            else                     cd[start]='1';
            c=parent;parent=HT[parent].parent;
        }
        HC[i]=new char [n-start];
        strcpy(HC[i],&cd[start]);
    } 
    free(cd);
}
//生成Huffmancode


void outHuffmanTree(HuffmanTree HT,int n){
 if(HT==NULL)
  printf("无huffmantree\n");
 int i;
 printf("输出huffmantree表格\n");
 printf("结点 weight parent lchild rchild\n");
 //printf("%d %2d %6d %6d %6d",i,HT[4].weight,HT[4].parent,HT[4].lchild,HT[4].rchild);//ceshi
 for(i=1;i<2*n;i++){
  printf("%2d %6d %6d %6d %6d\n",i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
 }
//输出Huffmantree
 
}
void outHuffmanCode(HuffmanCode HC,int n){
 if(HC==NULL)
  printf("无huffmancode\n");
 int i;
 printf("输出huffmancode表格\n");
 printf("结点 code\n");
 //printf("%d %2d %6d %6d %6d",i,HT[4].weight,HT[4].parent,HT[4].lchild,HT[4].rchild);//ceshi
 for(i=1;i<=n;i++){
  printf("%2d %d\n",i,HC[i]);
 }
}
//输出Huffmancode
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^