写代码输出字符的哈夫曼编码,为什么我的代码总是报错啊,大家可以看看,提示一下吗

我的代码


#include<stdio.h>
#define max 100
typedef struct hufnode
{
    int weight;
    int parent;
    int lchild;
    int rchild;
    char data;
}hnodetype;

void creathuff(hnodetype huftree[max], int n)
{
    int min1, min2, pos1, pos2;
    //初始化所有结点
    for (int i = 0; i < 2 * n - 1; i++)
    {
        huftree[i].data = 0;
        huftree[i].lchild = -1;
        huftree[i].rchild = -1;
        huftree[i].parent = -1;
        huftree[i].weight = 0;
    }
    //输入权值和字符
    printf("请输入字符以及它的权重:\n");
    for (int i = 0; i < n; i++)
    {
        scanf("%c:%d", &huftree[i].data, &huftree[i].weight);
    }
    //寻找权值最小的两个合并
    for (int i = 0; i < n; i++)
    {
        min1 = min2 = 999;
        pos1 = pos2 = 0;
        for (int j = 0; j < n; j++)
        {
            if (huftree[j].weight < min1 && huftree[j].parent == -1)
            {
                min1 = huftree[j].weight;
                pos1 = j;
            }
            else if (huftree[j].weight < min2 && huftree[j].parent == -1)
            {
                min2 = huftree[j].weight;
                pos2 = j;
            }
        }
        huftree[min1].parent = n + i;
        huftree[min2].parent = n + i;
        huftree[n + i].lchild = pos1;
        huftree[n + i].rchild = pos2;
        huftree[n + i].parent = -1;
        huftree[n + i].weight = min1 + min2;
    }
}

void huffnode(hnodetype huftree[max],int n,int i)
{
    int fa = 0;
    int a = 0;
    int b[100] = { 0 };
    while (huftree[i].parent != -1)
    {
        fa = huftree[i].parent;
        if (i == huftree[fa].lchild)
        {
            b[a] = 0;
            a++;
        }
        else
        {
            b[a] = 1;
            a++;
        }
        i = fa;
    }
    i--;
    printf("%c的编码是:\n", huftree[i].data);
    for (int k = i; k >= 0; k--)
    {
        printf("%d", b[k]);
    }
}

int main()
{
    hnodetype huftree[max];
    int n;
    printf("请输入你想创建的哈夫曼树的叶子结点数:\n");
    scanf("%d", &n);
    creathuff(&huftree[max], n);
    char c;
    printf("请输入你想要查询编码的字符:\n");
    scanf("%c", &c);
    for (int i = 0; i < n; i++)
    {
        if (c == huftree[i].data)
        {
            huffnode(&huftree[max], n, i);
        }
        else
        {
            break;
        }
    }
    return 0;
}

题目

img


运行结果

img

有没有报错内容啊

仅供参考:

#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