public HuffmanTreeLeafNode(HuffmanSymbolNode symbol) { Symbol = symbol; }
private void GenerateCode() { var input = new List <HuffmanSymbolNode>(); for (int i = 0; i < 512; i++) { if (frequncy[i] > 0) { var node = new HuffmanSymbolNode(); node.Symbol = i; node.Frequency = frequncy[i]; input.Add(node); } } var a = input.ToArray(); Array.Sort(a, delegate(HuffmanSymbolNode l, HuffmanSymbolNode r) { if (l.Frequency == r.Frequency) { return(l.Symbol.CompareTo(r.Symbol)); } return(l.Frequency.CompareTo(r.Frequency)); }); while (true) { var t = generateTree(a); t.UpdateDepth(0); if (input.All(x => x.Length <= 15)) { break; } for (int i = 0; i < a.Length; i++) { a[i].Frequency = a[i].Frequency / 2 + 1; } } Array.Sort(a, delegate(HuffmanSymbolNode l, HuffmanSymbolNode r) { if (l.Length == r.Length) { return(l.Symbol.CompareTo(r.Symbol)); } return(l.Length.CompareTo(r.Length)); }); int ncode = 0; int len = 0; foreach (var x in a) { while (len < x.Length) { ncode *= 2; len++; } x.Code = ncode; ncode++; } code = new Dictionary <int, HuffmanSymbolNode>(); foreach (var x in a) { code.Add(x.Symbol, x); } }