typedef char** HuffManCode;//存放编吗的类型,所以是二维数组
typedef struct Node
{
int weight;
int parent, lchild, rchild;
}HTNode,*HuffManTree;
void Select();
//哈夫曼编吗,第一个表示传入一个指针指向哈夫曼树,第二个表示返回的编吗数组,第三个表示权重,第四个表示数量
void HuffManCoding(HuffManTree *HT, HuffManCode *HC, int *w, int n)
{
int m, i, s1, s2, start,c,f;
HuffManTree p;
char* code;
if (n <= 1)
return;
m = 2 * n - 1;//m表示树的结点树
*HT = (HuffManTree)malloc(sizeof(HTNode)*(m + 1));//创建一个有m个空间的数组
for (p = *HT + 1, i = 1; i <= n; i++, p++, w++)//让指针指向数组第二个位置,不使用下标为0的位置
{
p->weight= *w;
p->lchild = 0;
p->rchild = 0;
p->parent = 0;
//对前n个位置进行初始化
}
for (; i <= m; p++, i++)
{
p->parent = 0;
//对后面n -1个结点的父结点初始化
}
for (i = n + 1; i <= m; i++)//构造哈夫曼树
{
Select(HT, i - 1, &s1, &s2);//用于选出2个小的结点下标
(*HT)[s1].parent = (*HT)[s2].parent = i;//将找出的2个结点的父结点指向i位置
(*HT)[i].lchild = s1;//s1比s2小,更小的在左边
(*HT)[i].rchild = s2;
(*HT)[i].weight = (*HT)[s1].weight + (*HT)[s2].weight;
}
在上面代码中,为什么我把(*HT)[i].lchild换为HT[i]->lchild就会报错,求大神详细说一下