Mood_Max 2021-04-23 22:11 采纳率: 100%
浏览 71
已采纳

我打断点调试,为什么我的Huffman树没有正确赋值?

typedef struct {
    char letter;
    int weight;
    int parent, left, right;
}Node, *HuffmanTree;

typedef char* HuffmanCode;

 

void CreateHuffmanTree(char* filename, HuffmanTree* HT, int* t) {
    FILE* fp = NULL;
    fopen_s(&fp, filename, "r");
    int n = *t;
    int count[128] = { 0 };
    char ch;
    //统计短文出现的字母个数n及字母出现次数
    while ((ch = fgetc(fp)) != EOF) {
        if(count[ch] == 0)
            n++;
        count[ch] += 1;
    }

    //申请Huffman树的空间,0号单元不用
    (*HT) = (HuffmanTree)malloc(2 * n * sizeof(Node));
    HuffmanTree p = *HT;
    int i, j;
    for (i = 0, j = 1; i < 128; i++) {
        if (count[i] != 0) {
            (p + j)->letter = i;
            (p + j)->weight = count[i];
            (p + j)->parent = 0;
            (p + j)->left = 0;
            (p + j)->right = 0;
            j++;
        }
    }
    for (j = n + 1; j < 2 * n; j++) {
        (p + j)->letter = "";
        (p + j)->weight = 0;
        (p + j)->parent = 0;
        (p + j)->left = 0;
        (p + j)->right = 0;
    }
    //构建Huffman树
    for (i = n + 1; i < 2 * n; i++) {
        int s1, s2;
        Select((*HT), i - 1, &s1, &s2);
        (p + s1)->parent = (p + s2)->parent = i;
        (p + i)->weight = (p + s1)->weight + (p + s2)->weight;
        (p + i)->left = s1;
        (p + i)->right = s2;
    }
}

  • 写回答

5条回答 默认 最新

  • 关注

    那可以先估计出问题的地方,继续调试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题