这是我从网上抄来的,可以正常运行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 课本作业4_18第一次
{
public class Node
{
private int weight;
private int lChild;
private int rChild;
private int parent;
private string data;
public int Weight
{
get { return weight; }
set { weight = value; }
}
public int LChild
{
get { return lChild; }
set { lChild = value; }
}
public int RChild
{
get { return rChild; }
set { rChild = value; }
}
public int Parent
{
get { return parent; }
set { parent = value; }
}
public string Data
{
get { return data; }
set { data = value; }
}
public Node()
{
weight = 0;
lChild = -1;
rChild = -1;
parent = -1;
data = "";
}
public Node(int w, int lc, int rc, int p ,string d)
{
weight = w;
lChild = lc;
rChild = rc;
parent = p;
data = d;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 课本作业4_18第一次
{
public class HuffmanTree
{
private Node[] data;
private int leafNum;
public Node this[int index]
{
get { return data[index]; }
set { data[index] = value; }
}
public int LeafNum
{
get { return leafNum; }
set { leafNum = value; }
}
public HuffmanTree(int n)
{
data = new Node[2 * n - 1];
for (int i = 0; i < data.Length; i++)
{
data[i] = new Node();
}
leafNum = n;
}
public void Create()
{
int min1;
int min2;
int temp1;
int temp2;
Console.WriteLine("请输入{0}个叶子结点的权值", leafNum);
for (int i = 0; i < leafNum; i++)
{
Console.Write("第{0}个为:", i);
string s = Console.ReadLine();
int temp = int.Parse(s);
data[i].Weight = temp;
}
Console.WriteLine("请输入{0}个叶子结点的字符内容", leafNum);
for (int i = 0; i < leafNum; i++)
{
Console.Write("第{0}个为:", i);
string s = Console.ReadLine();
data[i].Data = s;
}
for (int i = 0; i < this.leafNum - 1; i++)
{
min1 = Int32.MaxValue;
min2 = int.MaxValue;
temp1 = 0;
temp2 = 0;
for (int j = 0; j < leafNum + i; j++)
{
if ((data[j].Weight < min1) && (data[j].Parent == -1))
{
min2 = min1;
temp2 = temp1;
temp1 = j;
min1 = data[j].Weight;
}
else if ((data[j].Weight < min2) && (data[j].Parent == -1))
{
min2 = data[j].Weight;
temp2 = j;
}
}
data[temp1].Parent = leafNum + i;
data[temp2].Parent = leafNum + i;
data[leafNum + i].Weight = data[temp1].Weight + data[temp2].Weight;
data[leafNum + i].LChild = temp1;
data[leafNum + i].RChild = temp2;
}
foreach (var item in data)
{
Console.WriteLine("data:" + item.Data +
" parent:" + item.Parent.ToString() +
" weight:" + item.Weight.ToString() +
" LChild:" + item.LChild.ToString() +
" RChild:" + item.RChild.ToString());
}
}
}
}
static void Main(string[] args)
{
HuffmanTree t = new HuffmanTree(4);
t.Create();
Console.Read();
}