/// <summary> /// Deletes and returns minimum of heap. /// </summary> /// <returns>Deleted minimum (or null if empty).</returns> public Node <T, E> DeleteMinimum() { if (Roots.Head == null) { return(null); } LastOperationSteps = 0; var oldMin = Minimum; var childrenList = Minimum.Children; Minimum.ReleaseChildren(); Roots.SafeDeleteNode(Minimum); NodesCount--; Roots.Merge(childrenList); LastOperationSteps = childrenList.NodesCount; Consolidation(); return(oldMin); }