def heap_adjuster(arr, n, i): """ Adjusts the heap rooted at index i. arr: The list representing the heap n: The size of the heap i: The index of the node to adjust """ largest = i # Assume current root is largest left = 2 * i + 1 right = 2 * i + 2 # Check if left child exists and is greater than root if left < n and arr[left] > arr[largest]: largest = left
In the world of data structures, the "Heap" is a quiet giant. It powers priority queues, schedules operating system tasks, and finds the shortest path in maps (Dijkstra’s algorithm). But the heap doesn't maintain its magical properties by itself.
# Check if right child exists and is greater than current largest if right < n and arr[right] > arr[largest]: largest = right
You have a node at index i that is smaller than one of its children. The left and right subtrees below it are perfect heaps, but the current node is out of place.
Behind every efficient heap operation lies a silent workhorse: (also known as heapify or sift-down ).
Once you master the HeapAdjuster, you stop seeing heaps as magic black boxes and start seeing them as elegant, self-correcting structures. Whether you are writing a real-time scheduler, merging K-sorted lists, or acing your next technical interview, the humble heap_adjuster will be your most reliable tool.