哈夫曼树与哈夫曼代码问题

问题遇到的现象和发生背景 写函数关于求哈夫曼编码
用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct {

    int weight;
    int parent;
    int lchild;
    int rchild;
}HTnode;

void select1(HTnode *HT,int j,int *s1,int *s2)
{
    int min;
    //????????妊?
    for (int i = 1; i <= j; i++)
    {
        if (HT[i].parent == 0)
        {
            min = i;
            break;
        }
    }
    for (int i = min + 1; i <= j; i++)
    {
        if (HT[i].parent == 0 && HT[i].weight < HT[min].weight)
            min = i;
    }
    *s1 = min; 
    for (int i = 1; i <= j; i++)
    {
        if (HT[i].parent == 0 && i != *s1)
        {
            min = i;
            break;
        }
    }
    for (int i = min + 1; i <= j; i++)
    {
        if (HT[i].parent == 0 && HT[i].weight < HT[min].weight&&i != *s1)
            min = i;
    }
    *s2 = min;
    
}

HTnode* creatHUffmantree(int n)
{
   
    int m;
    int i;
    if(n<=1)
    return ;
    m=2*n-1;
    HTnode *HT=(HTnode*)malloc(sizeof(HTnode)*m);
    for(i=1;i<=n;i++)
   {
    HT[i].lchild=0;
    HT[i].rchild=0;
    HT[i].parent=0;
     
   }

   for(i=1;i<=n;i++)
   {
    scanf("%d",&HT[i].weight);
   }
  
  return HT;

   
    
}



char* huffmantreecode(HTnode *HT,int n)
{
    printf("----------------------------");
    char *HC=(char*)malloc(sizeof(char*)*n+1);
    char *hc=(char*)malloc(sizeof(char) * n);
    hc[n-1]='/0';
    for(int i=1;i<=n;i++)
    {
        int start=n-1;
        int c=i;
        int f=HT[c].parent;
        while(f!=0)
        {
            
            if(HT[f].lchild==c)
            hc[--start]='0';
            else
            hc[--start]='1';

            c=f;
            f=HT[c].parent;
        }
        HC[i]=(char*)malloc(sizeof(char)* n-start);
        strcpy(HC[i],hc[start]);
    }
    return HC;
    printf("----------------------------");
    
}

int main(void)
{
    int n;
    int i;
    int s1;
    int s2;
    printf("请输入根节点的个数\n");
    scanf("%d",&n);
    HTnode *HT=creatHUffmantree(n);
for(i=n+1;i<=2*n-1;i++)
    {
        select1(HT,i-1,&s1,&s2);

        HT[s1].parent=i;
        HT[s2].parent=i;
        HT[i].lchild=s1;
        HT[i].rchild=s2;
        HT[i].parent=0;
        HT[i].weight=HT[s1].weight+HT[s2].weight;

    }
    printf("左右双权\n");
    for(i=1;i<=2*n-1;i++)
    {
        
        printf("%d %d %d %d\n",HT[i].lchild,HT[i].rchild,HT[i].parent,HT[i].weight);
    }
    char *HC=huffmantreecode(HT,n);
    for(i=1;i<=n;i++)
    {
        printf("%s\n",HC[i]);
    }
   



}


运行结果及报错内容 不执行哈夫曼编码函数,直接跳过
我的解答思路和尝试过的方法 没有语法错误,与逻辑错误
我想要达到的结果 正常输出

哈夫曼树的算法都没问题,就是现在他不进入 我的求哈夫曼编码的函数,我觉得是形式参数传递除了问题,但也不报错

仅供参考:

#include <iostream>
#include <string>
using namespace std;
struct huffTree {
    int parent;
    int lchild;
    int rchild;
    int weight;
    string flag;
};
struct Lowest_node {
    char ch;
    int ch_num;
};
void coding(int length,huffTree *tree,int n,int &a,int &b) {
    int i;
    int r,s;

    r=s=length;
    for (i=0;i<n;i++) {
        if (tree[i].weight<r
         && tree[i].parent==-1) {
            r=tree[i].weight;
            a=i;
        }
    }
    for (i=0;i<n;i++) {
        if (tree[i].weight<s
         && i!=a
         && tree[i].parent==-1) {
            s=tree[i].weight;
            b=i;
        }
    }
}
void frequency(string str) {
    int i,j;
    int length=str.length();
    Lowest_node *node=new Lowest_node[length];

    for (i=0;i<length;i++) node[i].ch_num=0;

    int char_type_num=0;
    for (i=0;i<length;i++) {
        for (j=0;j<char_type_num;j++)
            if (str[i]==node[j].ch
            || ('a'<=node[j].ch && node[j].ch<='z'
                && str[i]+32==node[j].ch))
                break;//
        if (j<char_type_num) node[j].ch_num++;
        else {
            if ('A'<=str[i] && str[i] <= 'Z') node[j].ch=str[i]+32;
            else node[j].ch=str[i];
            node[j].ch_num++;
            char_type_num++;
        }
    }
    for (i=0;i<char_type_num;i++) {
        for (j=i;j<char_type_num;j++) {
            if (node[j].ch_num<node[j+1].ch_num) {
                int temp;
                char ch_temp;
                temp=node[j].ch_num;
                ch_temp=node[j].ch;
                node[j].ch_num=node[j+1].ch_num;
                node[j].ch=node[j+1].ch;
                node[j+1].ch_num=temp;
                node[j+1].ch=ch_temp;
            }
        }
    }
    for (i=0;i<char_type_num;i++)
        cout<<"字符"<<node[i].ch<<"出现了"<<node[i].ch_num<<"次"<<endl;
    huffTree *huff=new huffTree[2*char_type_num-1];
    huffTree temp;
    string *code=new string[2*char_type_num-1];

    for (i=0;i<2*char_type_num-1;i++) {
        huff[i].lchild=-1;
        huff[i].parent=-1;
        huff[i].rchild=-1;
        huff[i].flag=-1;
    }
    for (j=0;j<char_type_num;j++) huff[j].weight=node[j].ch_num;
    int min1,min2;
    for (int k=char_type_num;k<2*char_type_num-1;k++) {
        coding(length,huff,k,min1,min2);
        huff[min1].parent=k;
        huff[min2].parent=k;
        huff[min1].flag="0";
        huff[min2].flag="1";
        huff[k].lchild=min1;
        huff[k].rchild=min2;
        huff[k].weight=huff[min1].weight+huff[min2].weight;
    }
    for (i=0;i<char_type_num;i++) {
        temp=huff[i];
        while (1) {
            code[i]=temp.flag+code[i];
            temp=huff[temp.parent];
            if (temp.parent==-1) break;//
        }
    }
    cout<<"字符串的每个字符huffman编码为:"<<endl;
    for (i=0;i<char_type_num;i++) cout<<node[i].ch<<"  "<<code[i]<<endl;
    cout<<"整个字符串的huffman编码为:"<<endl;
    for (i=0;i<length;i++) {                                                                                     //S?
        for (j=0;j<char_type_num;j++) {
            if (str[i]==node[j].ch)
                cout<<code[j];
        }
    }
    delete[] node;
    node=NULL;
    delete[] huff;
    huff=NULL;
    delete[] code;
    code=NULL;
}
int main() {
    int length=0;
    string str;
    cout<<"请输入一个字符串:";
    cin>>str;
    frequency(str);
    return 0;
}
//请输入一个字符串:2333abcde
//字符3出现了3次
//字符2出现了1次
//字符a出现了1次
//字符b出现了1次
//字符c出现了1次
//字符d出现了1次
//字符e出现了1次
//字符串的每个字符huffman编码为:
//3  11
//2  000
//a  001
//b  010
//c  011
//d  100
//e  101
//整个字符串的huffman编码为:
//000111111001010011100101