哈夫曼树缺少头文件还有相关定义 求人解答 我搞了半天

#define MAX 999
//定义哈夫曼树的存储结构
typedef struct
{
char data;
int weight;
int parent;
int lch;
int rch;
}HuffNode;
//定义哈夫曼编码的存储结构
typedef struct
{ char bit[MAX];
int start;
}HuffCode;

//构造哈夫曼树
void HuffmanTree()
{
int i,k,left,right,min1,min2;
printf("输入叶子结点个数: ");
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)
{
//对哈夫曼树中的结点进行初始化
ht[i].parent = ht[i].lch = ht[i].rch = 0;
}
for(i=1;i<=n;i++)
{
getchar ();
printf ("输入第%d个叶子结点的值: ",i);
scanf ("%c",&ht[i].data);
printf ("输入该结点的权值: ");
scanf ("%d",&ht[i] .weight);
}
for (i=n+1;i<=2*n-1; i++)
{//在前n个结点中选取权值最小的两个结点构成一棵二叉树
min1 = nin2 = 100;//为min1和nin2设置-个比所有权值都大的值

       left = right = 0;

for(k=1;k<=i-1;k++)
if (ht[k].parent == 0)//若是根结点

//令min1和min2为最小的两个权值,left和right为权值最小的两个 //结点的位置

if (ht[k].weight < min1)
{
min2 = min1;
right = left;
nin1 = ht[k].weight;
left = k;
}

void HuffnanCode()
{
int i,c,k,f;
HuffCode cd;
for(i=1;i<=n;i++)
{
cd.start = n;
c=i;//c为要求编码的叶子结点

f = ht[i].parent;//F为该叶子结点的双亲

while (f!=0)
{
if(ht[f].lch == c)//若当前结点为左孩子,则编码为θ

cd.bit[cd.start] ='0';
else
//若当前结点为右孩子,则编码为1 .
cd.bit[cd .start] = '1';
cd .start --;
c=f;//令c为双亲结点
f = ht[f].parent;//令f为双亲结点的双亲
}
hcd[i] =cd;
}
printf("输出哈夫曼编码: /n");
for(i=1;i<=n;i++)//逐个输出各叶子结点的哈夫曼编码
{
printf ("%c: ",ht[i].data);
for (k = hcd[i].start + 1; k <= n; k ++)
//逐位输出叶子结点的哈夫曼编码
printf ("%C", hcd[i].bit[k]);
printf ("\n");
}
}

vodi main()
{
HuffmanTree();
HuffmanCode();
}

https://blog.csdn.net/m0_37156901/article/details/103623314