/// <summary> /// Вставка элемента в кучу /// </summary> /// <param name="element">Элемента</param> public void Insert(ComparableElement <TKey, TValue> element) { if (Count == _heap.Length) { throw new InvalidOperationException("Too many elements in heap. Try to extract elment before"); } _heap[Count] = element; HeapifyUp(); Count++; }
/// <summary> /// Вставка элемента в кучу /// </summary> /// <param name="element">Элемента</param> private void Insert(ComparableElement <int, VertextExt> element) { if (Count == Heap.Length) { throw new InvalidOperationException("Too many elements in heap. Try to extract elment before"); } Heap[Count] = element; _vertexesIndexes[element.Value.Vertex.Id] = Count; HeapifyUp(); Count++; }
/// <summary> /// Вставить элемент в дерево /// </summary> /// <param name="element">Элемент</param> public void Insert(ComparableElement <TKey, TValue> element) { if (element == null) { throw new ArgumentNullException(nameof(element)); } Node <TKey, TValue> prev = null; var curr = _root; while (curr != null) { prev = curr; if (curr.Key.CompareTo(element.Key) < 0) { curr = curr.Right; } else if (curr.Key.CompareTo(element.Key) > 0) { curr = curr.Left; } else { throw new ArgumentException($"element with key:{element.Key} already exists.", nameof(element)); } } if (prev == null) { _root = new Node <TKey, TValue> { Key = element.Key, Value = element.Value } } ; else { var node = new Node <TKey, TValue> { Key = element.Key, Value = element.Value, Parent = prev }; if (prev.Key.CompareTo(node.Key) < 0) { prev.Right = node; } else { prev.Left = node; } } _count++; }