private const int MAX = 100;
public static void Main()
HFMT[] HF = new HFMT[MAX];
Console.WriteLine("请输入权值的个数:");
n = int.Parse(Console.ReadLine());
public static void InitHFMT(HFMT[] HF, int n)
for (int i = 0; i < 2 * n - 1; i++)
for (int i = 0; i < n; i++)
Console.WriteLine("请输入第{0}个结点的权值:",i+1);
HF[i].weight = int.Parse(Console.ReadLine());
public static void Min(HFMT[] HF, int n, ref int p, ref int r, int j)
for (int i = 0; i < j; i++)
if (HF[i].parent == -1 && HF[i].weight < Min1)
for (int i = 0; i < j; i++)
if (HF[i].parent == -1 && HF[i].weight < Min2 && HF[i].weight > Min1)
public static void CreateHFMT(HFMT[] HF, int n)
for (i = n; i < 2 * n - 1; i++)
Min(HF, n, ref p, ref r, i);
HF[i].lchild = HF[p].weight;
HF[i].rchild = HF[r].weight;
HF[i].weight = HF[i].lchild + HF[i].rchild;
public static void HFnode(HFMT[] HF, int i, int j)
if (HF[j].rchild == HF[i].weight)
public static void HFMTnode(HFMT[] HF, int n)
Console.WriteLine("\n输入的权值所对应的哈夫曼代码为:");
Console.Write("{HF[i].weight}的编码为:");