|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
typedef struct HFTree {
int weight;
struct HFTree* lchild, * rchild, * parent;
char data;
} HFTree;
// 修改createHFTree函数的参数
void createHFTree(HFTree& HT, char value[], int fr[], int n) {
int lnode, rnode;
double min1, min2;
for (int i = 0; i < 2 * n - 1; i++) {
HT[i].parent = HT[i].lchild = HT[i].rchild = NULL;
if (i < n) {
HT[i].data = value[i];
HT[i].weight = fr[i];
}
}
for (int i = n; i < 2 * n - 1; i++) {
min1 = min2 = 32767;
lnode = rnode = -1;
for (int j = 0; j <= i - 1; j++) {
if (HT[j].parent == NULL) {
if (HT[j].weight < min1) {
min2 = min1;
rnode = lnode;
min1 = HT[j].weight;
lnode = j;
} else if (HT[j].weight < min2) {
min2 = HT[j].weight;
rnode = j;
}
}
}
HT[i].weight = HT[lnode].weight + HT[rnode].weight;
HT[i].lchild = &HT[lnode];
HT[i].rchild = &HT[rnode];
HT[lnode].parent = &HT[i];
HT[rnode].parent = &HT[i];
}
}
void printHFTree(const HFTree* node, int level) {
if (node != NULL) {
printHFTree(node->rchild, level + 1);
for (int i = 0; i < level; i++) {
printf(" ");
}
if (node->data != '\0') {
printf("%c:%d\n", node->data, node->weight);
} else {
printf("-:%d\n", node->weight);
}
printHFTree(node->lchild, level + 1);
}
}
int main() {
char characters[] = {'A', 'B', 'C', 'D'};
int weights[] = {4, 6, 8, 12};
int n = sizeof(characters) / sizeof(char);
// 修改为单个HFTree对象
HFTree HT[2 * n - 1];
createHFTree(HT[0], characters, weights, n);
// 输出Huffman树
printf("Huffman Tree:\n");
printHFTree(&HT[2 * n - 2], 0);
return 0;
}
为何报错[Error] no match for 'operator[]' (operand types are 'HFTree' and 'int')
如何修改呢?
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct HFTree {
- int weight;
- struct HFTree* lchild, * rchild, * parent;
- char data;
- } HFTree;
- // 修改createHFTree函数的参数,使其接受HFTree数组的指针
- void createHFTree(HFTree* HT, char value[], int fr[], int n) {
- int lnode, rnode;
- int min1, min2; // weight should be int, not double
- for (int i = 0; i < 2 * n - 1; i++) {
- HT[i].parent = HT[i].lchild = HT[i].rchild = NULL;
- HT[i].data = '\0'; // Initialize data to null character
- if (i < n) {
- HT[i].data = value[i];
- HT[i].weight = fr[i];
- }
- }
- // Rest of the function remains the same
- // ...
- }
- void printHFTree(const HFTree* node, int level) {
- // Function body remains the same
- // ...
- }
- int main() {
- char characters[] = {'A', 'B', 'C', 'D'};
- int weights[] = {4, 6, 8, 12};
- int n = sizeof(characters) / sizeof(char);
- HFTree HT[2 * n - 1];
- // 修改调用createHFTree函数,传入HT数组
- createHFTree(HT, characters, weights, n);
- // 输出Huffman树
- printf("Huffman Tree:\n");
- printHFTree(&HT[2 * n - 2], 0);
- return 0;
- }
复制代码
|
|