📖 Scenario: Imagine you are managing a priority queue for tasks where the highest priority task should be processed first. You use a heap data structure to keep tasks ordered by priority. When you remove the top task, you need to reorganize the heap to keep it valid. This reorganization is called "bubble down".
🎯 Goal: You will build a simple max heap in Java and implement the extractMax method that removes the largest element and then "bubbles down" the new root to restore the heap property.
📋 What You'll Learn
Create an integer array called heap representing a max heap with exact values
Create an integer variable size representing the number of elements in the heap
Write a method extractMax() that removes and returns the max element from the heap
Implement the bubbleDown helper method to restore the max heap property after extraction
Print the heap array after extraction and bubble down to show the updated heap
💡 Why This Matters
🌍 Real World
Heaps are used in priority queues, scheduling tasks, and algorithms like Dijkstra's shortest path.
💼 Career
Understanding heap operations is important for software engineers working on performance-critical applications and system design.
Progress0 / 4 steps
1
Create the initial max heap array and size
Create an integer array called heap with these exact values: {90, 70, 80, 50, 60, 40, 30}. Also create an integer variable called size and set it to 7.
DSA Java
Hint
The heap array holds the elements in max heap order. The size variable tracks how many elements are in the heap.
2
Add the extractMax method header and size update
Add a method called extractMax() that returns an int. Inside it, create an integer variable max and set it to heap[0]. Then decrease size by 1.
DSA Java
Hint
The extractMax method will remove the top element and update the heap size.
3
Move last element to root and implement bubbleDown logic
Inside extractMax(), set heap[0] to heap[size]. Then call a helper method bubbleDown(0). Write the bubbleDown(int index) method that compares the node at index with its children and swaps with the larger child if needed, repeating until the heap property is restored.
DSA Java
Hint
The bubbleDown method swaps the current node with the larger child until the heap property is restored.
4
Print the heap array after extraction and bubble down
Call extractMax() and print the heap array elements from index 0 to size - 1 separated by spaces on one line.
DSA Java
Hint
After extraction and bubble down, the heap array should print the updated max heap elements separated by spaces.
Practice
(1/5)
1. What is the main purpose of the bubble down operation in a heap after extracting the min or max element?
easy
A. To remove all leaf nodes from the heap
B. To restore the heap property by moving the root element down to its correct position
C. To swap the last element with the root without any further changes
D. To insert a new element at the bottom of the heap
Solution
Step 1: Understand the extract operation
When we remove the min or max element (usually the root), the heap may lose its order property.
Step 2: Purpose of bubble down
Bubble down moves the new root element down the tree to restore the heap property by swapping it with the smaller (min-heap) or larger (max-heap) child.
Final Answer:
To restore the heap property by moving the root element down to its correct position -> Option B
Quick Check:
Bubble down fixes heap order after extraction [OK]
Hint: Bubble down fixes heap order after removing root [OK]
Common Mistakes:
Thinking bubble down inserts new elements
Assuming bubble down removes leaf nodes
Believing bubble down only swaps root and last element
2. Which of the following Java method signatures correctly represents a bubble down operation for a min-heap stored in an array?
easy
A. void bubbleDown(int[] heap, int index, int size)
B. int bubbleDown(int[] heap, int size)
C. void bubbleDown(int index, int[] heap)
D. boolean bubbleDown(int[] heap, int index)
Solution
Step 1: Identify parameters needed for bubble down
We need the heap array, the current index to bubble down from, and the size of the heap to avoid out-of-bounds.
Step 2: Match method signature
void bubbleDown(int[] heap, int index, int size) has all parameters in correct order and returns void as bubble down modifies the heap in place.
Final Answer:
void bubbleDown(int[] heap, int index, int size) -> Option A
Quick Check:
Correct parameters and void return for bubble down [OK]
Hint: Bubble down needs array, index, and size parameters [OK]
Common Mistakes:
Missing size parameter causing index errors
Wrong return type expecting a value
Incorrect parameter order
3. Given the min-heap array [2, 5, 3, 10, 7], after extracting the min element and performing bubble down, what will be the resulting heap array?
medium
A. [3, 5, 7, 10]
B. [5, 7, 3, 10]
C. [3, 7, 5, 10]
D. [5, 3, 7, 10]
Solution
Step 1: Remove min and replace root
Remove 2 (min), replace root with last element 7: [7, 5, 3, 10]
Step 2: Bubble down from root
Compare 7 with children 5 and 3; smallest is 3. Swap 7 and 3: [3, 5, 7, 10]. Now 7 has children 10 only, 7 < 10, so stop.
Final Answer:
[3, 5, 7, 10] -> Option A
Quick Check:
Bubble down restores min-heap order [OK]
Hint: Replace root with last, then swap down with smaller child [OK]
Common Mistakes:
Not replacing root with last element before bubble down
Swapping with wrong child (larger instead of smaller)
Stopping bubble down too early
4. Consider this bubble down code snippet for a max-heap. Identify the bug:
void bubbleDown(int[] heap, int index, int size) {
int largest = index;
int left = 2 * index + 1;
int right = 2 * index + 2;
if (left < size && heap[left] > heap[largest]) {
largest = left;
}
if (right < size && heap[right] > heap[largest]) {
largest = right;
}
if (largest != index) {
int temp = heap[index];
heap[index] = heap[largest];
heap[largest] = temp;
bubbleDown(heap, largest, size);
}
}
medium
A. The comparison operators should be < instead of > for max-heap
B. The left and right child indices calculation is incorrect
C. The recursive call should be bubbleDown(heap, index, size) instead of bubbleDown(heap, largest, size)
D. There is no bug; the code correctly performs bubble down
Solution
Step 1: Check child index calculations
Left = 2*index+1 and right = 2*index+2 are correct for binary heap stored in array.
Step 2: Verify comparisons and recursion
Comparisons use > for max-heap to find largest child. Recursive call uses largest index to continue bubbling down correctly.
Final Answer:
There is no bug; the code correctly performs bubble down -> Option D
Quick Check:
Child indices and recursion are correct [OK]
Hint: Check indices and recursion carefully; they are often correct [OK]
Common Mistakes:
Confusing child index formulas
Wrong comparison operators for max-heap
Incorrect recursive call index
5. You have a max-heap represented by the array [20, 18, 15, 10, 12, 9, 8]. After extracting the max element and performing bubble down, what is the resulting heap array?
hard
A. [18, 15, 12, 10, 9, 8]
B. [18, 12, 15, 10, 9, 8]
C. [18, 12, 15, 10, 8, 9]
D. [18, 10, 15, 12, 9, 8]
Solution
Step 1: Extract max and replace root
Remove 20, replace root with last element 8: [8, 18, 15, 10, 12, 9]
Step 2: Bubble down from root
Compare 8 with children 18 and 15; largest is 18. Swap 8 and 18: [18, 8, 15, 10, 12, 9]. Now bubble down at index 1.
Step 3: Continue bubble down
At index 1, children are 10 and 12; largest is 12. Swap 8 and 12: [18, 12, 15, 10, 8, 9]. At index 4, children do not exist, stop.
Final Answer:
[18, 12, 15, 10, 8, 9] -> Option C
Quick Check:
Bubble down swaps with largest child until heap restored [OK]
Hint: Replace root with last, swap down with largest child repeatedly [OK]
Common Mistakes:
Not continuing bubble down after first swap
Swapping with smaller child by mistake
Forgetting to update heap size after extraction
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.