/// <summary> /// Рекурсивное добавление ключа в узел. Внутренние узлы /// передают управление листьевым, где и производится /// добавление. Возможна перестройка структуры дерева из-за /// переполнения ключей. /// </summary> /// <param name="key">Добавляемый ключ.</param> public override void Add(T key) { LinkedNode <T> child = GetChild(key); child.Add(key); if (child.IsOverflow()) { LinkedNode <T> sibling = child.Split(); InsertChild(sibling.GetFirstLeafKey(), sibling); } }
/// <summary> /// Добавление элемента в дерево /// </summary> /// <param name="node">Элемент</param> public void Add(T node) { if (_root == null) { Level++; _root = new LeafLinkedNode <T>(Factor); } _root.Add(node); if (_root.IsOverflow()) { Level++; var sibling = _root.Split(); var newRoot = new InternalLinkedNode <T>(Factor); newRoot.Keys.Add(sibling.GetFirstLeafKey()); newRoot.Children.Add(_root); newRoot.Children.Add(sibling); _root = newRoot; } }