/// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="factor">
 /// Параметр ветвления. Каждый внутренний узел содержит
 /// от (factor - 1) до (factor * 2 - 1) ключей и на один
 /// больше дочерних узлов. Для корня от 1 до (factor * 2 - 1).
 /// </param>
 public LinkedInternalNode(int factor)
 {
     Keys     = new LinkedCollection <T>();
     Children = new LinkedCollection <TreeNode <T> >();
     Factor   = factor;
     Factory  = new LinkedNodeFactory <T>();
 }
        /// <summary>
        /// Получение части списка с заданного индекса.
        /// </summary>
        /// <param name="index">Заданный индекс.</param>
        /// <param name="count">Количество элементов.</param>
        /// <returns></returns>
        public IExtendedCollection <T> GetRange(int index, int count)
        {
            if (index < 0 || count < 0)
            {
                throw new ArgumentOutOfRangeException();
            }
            if (Count < count + index)
            {
                throw new ArgumentException();
            }

            var list = new LinkedCollection <T>();

            for (int i = index; i < count + index; i++)
            {
                list.Add(this[i]);
            }

            return(list);
        }
 /// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="factor">
 /// Параметр ветвления. Каждый лист содержит
 /// от (factor - 1) до (factor * 2 - 1) ключей.
 /// Для корня от 1 до (factor * 2 - 1).
 /// </param>
 public LinkedLeafNode(int factor)
 {
     Keys    = new LinkedCollection <T>();
     Factor  = factor;
     Factory = new LinkedNodeFactory <T>();
 }