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;
}
}
那可以先估计出问题的地方,继续调试
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html