/// <summary> /// Деление узла. /// </summary> /// <returns>Появившийся в результате деления узел.</returns> public override TreeNode <T> Split() { int from = Keys.Count / 2; int count = Keys.Count - from; LeafNode <T> sibling = Factory.CreateLeafNode(Factor); sibling.Keys.AddRange(Keys.GetRange(from, count)); Keys = Keys.GetRange(0, from); sibling.Next = Next; Next = sibling; return(sibling); }
/// <summary> /// Добавление элемента в дерево /// </summary> /// <param name="node">Элемент</param> public void Add(T node) { if (_root == null) { Level++; _root = Factory.CreateLeafNode(Factor); } _root.Add(node); if (_root.IsOverflow()) { Level++; var sibling = _root.Split(); var newRoot = Factory.CreateInternalNode(Factor); newRoot.Keys.Add(sibling.GetFirstLeafKey()); newRoot.Children.Add(_root); newRoot.Children.Add(sibling); _root = newRoot; } }