Bird
Raised Fist0
DSA Goprogramming~5 mins

Heap Extract Min or Max Bubble Down in DSA Go - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
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
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
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)
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
In a min-heap, after bubbling down, the root element is:
ARandom element
BThe largest element
CThe smallest element
DThe last element
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

      1. Step 1: Understand extract-min operation

        When the minimum element (root) is removed, the last element is moved to the root.
      2. Step 2: Apply bubble down to restore heap

        The bubble down moves this element down the tree to restore the min-heap property.
      3. Final Answer:

        To restore the heap property by moving the root element down to its correct position -> Option B
      4. 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

      1. Step 1: Identify bubble down for min-heap

        Bubble down compares current node with children and swaps with smallest child.
      2. 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.
      3. Final Answer:

        Option A code snippet correctly implements bubble down for min-heap -> Option A
      4. 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

      1. Step 1: Remove min and replace root

        Remove 2 (root), move last element 15 to root: [15,4,5,10,8]
      2. 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]
      3. Final Answer:

        [4, 8, 5, 10, 15] -> Option A
      4. 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

      1. 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.
      2. 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.
      3. Final Answer:

        The comparisons use '<' instead of '>' for max-heap -> Option D
      4. 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

      1. Step 1: Remove max and replace root

        Remove 50 (root), move last element 35 to root: [35,30,40,10,20]
      2. 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.
      3. Final Answer:

        [40, 30, 35, 10, 20] -> Option C
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard