What is the purpose of the 'bubble down' operation in a heap after extracting the min or max?
The 'bubble down' operation restores the heap property by moving the root element down the tree until it is in the correct position, ensuring the heap remains a valid min-heap or max-heap.
Click to reveal answer
beginner
In a min-heap, after extracting the minimum element, which element replaces the root before bubbling down?
The last element in the heap replaces the root before the bubble down process begins.
Click to reveal answer
intermediate
Describe the condition to decide when to stop bubbling down in a max-heap.
Stop bubbling down when the current node is greater than or equal to both its children or when it has no children.
Click to reveal answer
intermediate
What is the time complexity of the extract min or max operation with bubble down in a heap of size n?
The time complexity is O(log n) because the bubble down operation moves down the height of the heap, which is logarithmic in the number of elements.
Click to reveal answer
advanced
Show the first step of bubble down after extracting min from this min-heap: [2, 5, 3, 8, 10]. The last element is moved to root.
After removing 2, move 10 to root: [10, 5, 3, 8]. Compare 10 with children 5 and 3. Swap 10 with 3 (smallest child). New heap: [3, 5, 10, 8].
Click to reveal answer
What element replaces the root in a heap after extracting the min or max?
AThe largest child
BThe smallest child
CA new random element
DThe last element in the heap
✗ Incorrect
After extraction, the last element moves to the root before bubbling down.
In a max-heap, when does the bubble down operation stop?
AWhen the current node is greater than or equal to its children
BWhen the current node is smaller than its children
CWhen the heap is empty
DAfter one swap
✗ Incorrect
Bubble down stops when the node is larger or equal to its children, maintaining max-heap property.
What is the time complexity of the extract min or max operation in a heap?
AO(1)
BO(log n)
CO(n log n)
DO(n)
✗ Incorrect
Extracting min or max requires bubbling down, which takes O(log n) time.
Which of these is NOT a step in the extract min or max operation?
ABubble up the root element
BRemove the root element
CReplace root with last element
DBubble down the root element
✗ Incorrect
Bubble up is used when inserting, not when extracting.
In a min-heap, after bubbling down, the root element is:
ARandom element
BThe largest element
CThe smallest element
DThe last element
✗ Incorrect
The root always holds the smallest element in a min-heap.
Explain the steps involved in extracting the minimum element from a min-heap and how bubble down restores the heap property.
Think about how the smallest element is removed and how the heap fixes itself.
You got /5 concepts.
Describe the difference between bubble down in a min-heap and a max-heap during extract operations.
Focus on which child is chosen to swap with in each heap type.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the bubble down operation in a min-heap after extracting the minimum element?
easy
A. To add a new element at the end of the heap
B. To restore the heap property by moving the root element down to its correct position
C. To swap the minimum element with the maximum element
D. To remove all leaf nodes from the heap
Solution
Step 1: Understand extract-min operation
When the minimum element (root) is removed, the last element is moved to the root.
Step 2: Apply bubble down to restore heap
The bubble down moves this element down the tree to restore the min-heap property.
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 after extract-min [OK]
Hint: Bubble down fixes heap from root after removal [OK]
Common Mistakes:
Thinking bubble down adds elements
Confusing bubble down with bubble up
Believing bubble down swaps min and max
2. Which of the following Go code snippets correctly performs the bubble down operation for a min-heap starting at index i in slice heap?
easy
A. for {
left := 2*i + 1
right := 2*i + 2
smallest := i
if left < len(heap) && heap[left] < heap[smallest] {
smallest = left
}
if right < len(heap) && heap[right] < heap[smallest] {
smallest = right
}
if smallest == i {
break
}
heap[i], heap[smallest] = heap[smallest], heap[i]
i = smallest
}
B. for i < len(heap) {
left := 2*i
right := 2*i + 1
if heap[left] > heap[right] {
heap[i], heap[left] = heap[left], heap[i]
i = left
} else {
heap[i], heap[right] = heap[right], heap[i]
i = right
}
}
C. for i > 0 {
parent := (i - 1) / 2
if heap[i] < heap[parent] {
heap[i], heap[parent] = heap[parent], heap[i]
i = parent
} else {
break
}
}
D. for {
left := 2*i + 1
right := 2*i + 2
largest := i
if left < len(heap) && heap[left] > heap[largest] {
largest = left
}
if right < len(heap) && heap[right] > heap[largest] {
largest = right
}
if largest == i {
break
}
heap[i], heap[largest] = heap[largest], heap[i]
i = largest
}
Solution
Step 1: Identify bubble down for min-heap
Bubble down compares current node with children and swaps with smallest child.
Step 2: Check code correctness
for {
left := 2*i + 1
right := 2*i + 2
smallest := i
if left < len(heap) && heap[left] < heap[smallest] {
smallest = left
}
if right < len(heap) && heap[right] < heap[smallest] {
smallest = right
}
if smallest == i {
break
}
heap[i], heap[smallest] = heap[smallest], heap[i]
i = smallest
} correctly finds smallest child and swaps until heap property is restored.
Final Answer:
Option A code snippet correctly implements bubble down for min-heap -> Option A
Quick Check:
Min-heap bubble down uses smallest child swap [OK]
Hint: Bubble down swaps with smallest child in min-heap [OK]
Common Mistakes:
Using 1-based indexing instead of 0-based
Swapping with largest child in min-heap
Using bubble up logic instead of bubble down
3. Given the min-heap represented by the slice heap := []int{2, 4, 5, 10, 8, 15}, what will be the heap slice after extracting the minimum element and performing bubble down?
medium
A. [4, 8, 5, 10, 15]
B. [5, 4, 15, 10, 8]
C. [4, 10, 5, 15, 8]
D. [8, 4, 5, 10, 15]
Solution
Step 1: Remove min and replace root
Remove 2 (root), move last element 15 to root: [15,4,5,10,8]
Step 2: Bubble down 15
Compare 15 with children 4 and 5; swap with 4 (smallest). Now heap: [4,15,5,10,8]. Next, bubble down 15 at index 1: children 10 and 8; swap with 8 (smallest). Final heap: [4,8,5,10,15]
Final Answer:
[4, 8, 5, 10, 15] -> Option A
Quick Check:
Extract min + bubble down = [4,8,5,10,15] [OK]
Hint: Replace root with last, then swap down with smaller child [OK]
Common Mistakes:
Not swapping with smallest child first
Forgetting to move last element to root
Swapping with larger child
4. Consider the following Go code snippet for bubble down in a max-heap. Identify the bug that causes incorrect heap after extraction:
func bubbleDown(heap []int, i int) {
for {
left := 2*i + 1
right := 2*i + 2
largest := i
if left < len(heap) && heap[left] < heap[largest] {
largest = left
}
if right < len(heap) && heap[right] < heap[largest] {
largest = right
}
if largest == i {
break
}
heap[i], heap[largest] = heap[largest], heap[i]
i = largest
}
}
medium
A. The loop condition should be 'while i > 0' instead of infinite loop
B. The indices for left and right children are incorrect
C. Swapping elements should be done after the loop ends
D. The comparisons use '<' instead of '>' for max-heap
Solution
Step 1: Understand max-heap bubble down logic
In max-heap, bubble down swaps with the largest child, so comparisons should find the largest value.
Step 2: Identify incorrect comparison operators
The code uses '<' to find smaller child, which is wrong for max-heap; it should use '>' to find largest child.
Final Answer:
The comparisons use '<' instead of '>' for max-heap -> Option D
Quick Check:
Max-heap bubble down uses '>' comparisons [OK]
Hint: Max-heap bubble down compares with '>' not '<' [OK]
Common Mistakes:
Using wrong comparison operators for heap type
Incorrect child index calculations
Misplacing swap inside or outside loop
5. You have a max-heap represented as heap := []int{50, 30, 40, 10, 20, 35}. After extracting the maximum element and performing bubble down, what will be the resulting heap slice?
hard
A. [35, 30, 40, 10, 20]
B. [30, 20, 35, 10, 40]
C. [40, 30, 35, 10, 20]
D. [40, 30, 35, 20, 10]
Solution
Step 1: Remove max and replace root
Remove 50 (root), move last element 35 to root: [35,30,40,10,20]
Step 2: Bubble down 35
Compare 35 with children 30 and 40; swap with 40 (largest). Now heap: [40,30,35,10,20]. Next, bubble down 35 at index 2: children indices 5 and 6 do not exist (len=5), so stop. This restores the max-heap property.
Final Answer:
[40, 30, 35, 10, 20] -> Option C
Quick Check:
Extract max + bubble down = [40,30,35,10,20] [OK]
Hint: Swap with largest child repeatedly until heap property restored [OK]
Common Mistakes:
Not swapping with largest child first
Stopping bubble down too early
Ignoring heap property for children
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.