/// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="posCount">число частей речи</param>
 /// <param name="depth">глубина</param>
 public POSTree(int posCount, int depth)
 {
     if (posCount <= 0 || depth <= 0)
         throw new ApplicationException();
     this.posCount = posCount;
     this.depth = depth;
     startNode = new POSTreeNode(posCount);
 }
 /// <summary>
 /// Выполнить постобработку вершины и её детей
 /// </summary>
 /// <param name="startNode">вершина</param>
 private static void PostProcess(POSTreeNode startNode)
 {
     var maxIndex = 0;
     var maxValue = startNode.POS[0];
     var sum = 0;
     for(var i = 0; i < startNode.POS.Length; i++)
     {
         sum += startNode.POS[i];
         if (startNode.POS[i] <= maxValue) continue;
         maxValue = startNode.POS[i];
         maxIndex = i;
     }
     if (sum != 0)
     // ReSharper disable PossibleLossOfFraction
         startNode.MaxFrequency = maxValue / sum;
     // ReSharper restore PossibleLossOfFraction
     startNode.SupposedPos = maxIndex;
     // рекурсивно обработать остальные вершины
     foreach (var node in startNode.Next.Values)
     {
         PostProcess(node);
     }
 }