哈夫曼樹 C#
阿新 • • 發佈:2019-01-02
這是我從網上抄來的,可以正常執行
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();
}