DSA Tracker

DSA Tracker

Topic Lesson

Learn Heap from scratch

A complete 4-step path: handwritten notebook primer, animated visualizer, speed check quiz, and compiler practice.

What is Heap

notebook note

A heap is a specialized tree that keeps only the single most extreme item at the very top. In a min-heap, every parent node is smaller than its children, so the smallest element in the entire collection sits immediately at the root. Unlike a binary search tree, a heap does not keep all items in full sorted order. It maintains only a partial order, making it fast at giving you the single smallest or largest item without spending time sorting everything else.

When to reach for it

Reach for a heap when a problem asks for the top k largest elements, the kth smallest value, or a running median from a stream of numbers. Signals include phrases like continuously finding the cheapest item, merging k sorted linked lists, or scheduling tasks with priorities. Whenever you need repeated access to the minimum or maximum value while items are added and removed dynamically, a priority heap is the tool.

How to think about it

To find the k largest elements, keep a min-heap of fixed size k. Push incoming numbers into the heap; whenever the heap size grows past k, pop the top item, which is the smallest among them. After processing all elements, only the k largest remain. For a running median, balance two heaps: a max-heap holding the smaller half of numbers and a min-heap holding the larger half. In code, heaps are stored compactly as flat arrays where a node at index i has children at indices 2i plus 1 and 2i plus 2.

Operation costs

measured big-O
OperationTime
read the minimum or maximum elementO(1)
insert a new element and sift into positionO(log n)
remove the top element and sift downO(log n)
build a heap from an array of n itemsO(n)

Common mistakes to avoid

  • Using a max-heap instead of a min-heap when keeping the k largest elements, causing the largest values to be evicted while small items stay behind.
  • Assuming that extracting elements by iterating over the backing array yields sorted order, without popping items from the heap one by one.
  • Forgetting that standard language libraries provide a min-heap by default, leading to wrong answers when a max-heap was required.
Step 1 of 4