void InitHffman(Tree& HT, NumberWeight w, int n) { Tree p = NULL; if (n <= 1) return; int m, i; //赫夫曼树结点个数 m = 2 * n - 1; HT = (Tree)malloc((m + 1) * sizeof(HTNode)); //头节点 HT[0] = { -1,-1,-1,'-1'}; //初始化基础结点 for (i = 1, p = HT, ++p; i <= n; ++i, ++p, ++w)//前n个赋权值 *p = { (*w)->ww,0,0,0,(*w)->cc }; //剩余部分初始化为0 for (i; i <= m; ++i, ++p) *p = { 0,0,0,0,'0' }; }
时间: 2024-01-30 15:04:18 浏览: 65
这段代码中有几个问题:
1. 第3行中的变量 `Tree` 没有定义,应该先定义结构体类型 `HTNode`,再用 `typedef` 定义 `Tree` 为指向 `HTNode` 结构体的指针类型。
2. 第7行中的变量 `Tree p` 被定义为指向 `HTNode` 结构体的指针类型,但没有初始化,可能会导致非法访问内存。
3. 第12行中的结构体初始化方式是错误的,应该使用赋值语句或者使用花括号括起来的初始化列表。
下面是修改后的代码:
```c++
typedef struct HTNode {
int weight; // 权值
int parent, lchild, rchild; // 父结点、左孩子、右孩子
char data; // 结点值(仅叶子结点有)
} HTNode, *Tree;
void InitHffman(Tree& HT, NumberWeight w, int n) {
Tree p = NULL;
if (n <= 1) return;
int m, i;
m = 2 * n - 1;
HT = (Tree)malloc((m + 1) * sizeof(HTNode));
HT[0].weight = -1;
HT[0].parent = -1;
HT[0].lchild = -1;
HT[0].rchild = -1;
HT[0].data = '-';
for (i = 1, p = HT + 1; i <= n; ++i, ++p, ++w) {
p->weight = w->ww;
p->parent = 0;
p->lchild = 0;
p->rchild = 0;
p->data = w->cc;
}
for (; i <= m; ++i, ++p) {
p->weight = 0;
p->parent = 0;
p->lchild = 0;
p->rchild = 0;
p->data = '0';
}
}
```
注意,这里只是简单修复了代码中的语法错误,并未对算法本身做出修改。如果还有其他问题,可以再提出来让我看看。
阅读全文