求大神帮忙解决一下问题

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就会报错,求大神详细说一下