for (i=0;i<n;i++) //把初始化的数据存入ht结构体中Р {Р ht[i].data=str[i];Р ht[i].weight=fnum[i];Р }Р while (flag) //菜单函数,当flag为0时跳出循环Р3.2存储表示Рtypedef struct { Рint weight; // 叶子结点的权值Рint lchild, rchild, parent; // 左右孩子及双亲指针Р}HTNode; // 树中结点类型Рtypedef HTNode HuffmanTree[M+1]; Р3.3赫夫曼树的算法Рvoid CreateHT(HTNode ht[],int n) //调用输入的数组ht[],和节点数nР{Р int i,k,lnode,rnode;Р int min1,min2;Р for (i=0;i<2*n-1;i++) Р ht[i].parent=ht[i].lchild=ht[i].rchild=-1; //所有结点的相关域置初值-1Р for (i=n;i<2*n-1;i++) //构造哈夫曼树Р?{Р min1=min2=32767; //int的范围是-32768—32767Р lnode=rnode=-1; //lnode和rnode记录最小权值的两个结点位置Р for (k=0;k<=i-1;k++)Р {Р if (ht[k].parent==-1) //只在尚未构造二叉树的结点中查找Р {Р if (ht[k].weight<min1) //若权值小于最小的左节点的权值Р {Р min2=min1;rnode=lnode;Р min1=ht[k].weight;lnode=k;Р }Р else if (ht[k].weight<min2)Р {Р min2=ht[k].weight;rnode=k;Р }