/// <summary> /// Method used for testing that displays encoding to the console. /// </summary> /// <param name="root"></param> private void DisplayEncodingTable(BinaryTreeNode <CharacterFrequency> root) { if (root != null) { Encoding.Append("0"); DisplayEncodingTable(root.Left); if (root.IsLeaf()) { var charEncoding = new CharacterEncoding((byte)root.Data.Character, Encoding.ToString()); Console.Write(charEncoding.Character.ToString()); Console.Write(" - "); Console.WriteLine(charEncoding.Encoding); } Encoding.Append("1"); DisplayEncodingTable(root.Right); if (Encoding.Length > 0) { Encoding.Remove(Encoding.Length - 1, 1); } } else { // Remove a character from the encoding string// Check and reove multiple 0's too maybe? Encoding.Remove(Encoding.Length - 1, 1); //Console.WriteLine("remove!"); } }
/// <summary> /// Builds Encoding table for the given huffman tree root node /// </summary> /// <param name="root">Huffamn tree root</param> private void BuildEncodingTable(BinaryTreeNode <CharacterFrequency> root) { if (root != null) { Encoding.Append("0"); BuildEncodingTable(root.Left); if (root.IsLeaf()) { byte index = (byte)root.Data.Character; CharEncodings[index].Encoding = Encoding.ToString(); } Encoding.Append("1"); BuildEncodingTable(root.Right); if (Encoding.Length > 0) { Encoding.Remove(Encoding.Length - 1, 1); } } else { // Remove a character from the encoding string// Check and reove multiple 0's too maybe? Encoding.Remove(Encoding.Length - 1, 1); //Console.WriteLine("remove!"); } }