public static List <string> GetWords(BinaryTree mainTree) { listWord = new List <string>(); _getWords(mainTree); return(listWord); }
static void Main(string[] args) { List <double> frequencesList = new List <double>(); Console.WriteLine("Введите частоту. \nКогда сумма достигнет единицу, ввод будет остановлен."); while (true) { double current = Readdouble(); frequencesList.Add(current); double sum = GetListSum(frequencesList); if (sum > 1) { Console.WriteLine("Сумма введенных частот больше 1! Введенный список очищен, повторите ввод."); frequencesList = new List <double>(); // если введённые числа в сумме превысили единицу } if (sum == 1) { Console.WriteLine("Ввод законче."); break; } } Console.WriteLine("\nВведенная частота:"); frequencesList.Sort(); frequencesList.Reverse(); foreach (var t in frequencesList) { Console.WriteLine(t); } List <BinaryTree> treeList = new List <BinaryTree>(); for (int i = 0; i < frequencesList.Count; i++) { treeList.Add(new BinaryTree(frequencesList[i])); } while (treeList.Count > 1) { treeList.Sort(); BinaryTree first = treeList[0]; BinaryTree second = treeList[1]; treeList[1] = new BinaryTree(first.Value + second.Value); treeList[1].Right = first; treeList[1].Left = second; treeList.RemoveAt(0); } List <string> codesList = Words.GetWords(treeList[0]); Console.WriteLine("\nРезультат: "); foreach (var t in codesList) { Console.WriteLine(t); } Console.WriteLine("Средняя длина кодового слова(Код Хаффмана): " + GetHuffmanElongation(frequencesList, codesList)); Console.WriteLine("Длина кода(универсальный код): " + GetUniformElongation(codesList.Count)); Console.ReadLine(); }