0
0
DSA Javascriptprogramming~20 mins

Build Heap from Array Heapify in DSA Javascript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Heap Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Min-Heap after buildHeap
What is the printed state of the min-heap array after running the buildHeap function on the input array?
DSA Javascript
function buildMinHeap(arr) {
  const n = arr.length;
  function heapify(i) {
    let smallest = i;
    const left = 2 * i + 1;
    const right = 2 * i + 2;
    if (left < n && arr[left] < arr[smallest]) smallest = left;
    if (right < n && arr[right] < arr[smallest]) smallest = right;
    if (smallest !== i) {
      [arr[i], arr[smallest]] = [arr[smallest], arr[i]];
      heapify(smallest);
    }
  }
  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
    heapify(i);
  }
  return arr;
}

const input = [9, 4, 7, 1, -2, 6, 5];
const heap = buildMinHeap(input);
console.log(heap);
A[1, -2, 5, 4, 9, 6, 7]
B[-2, 1, 5, 9, 4, 6, 7]
C[-2, 1, 6, 4, 9, 5, 7]
D[1, 4, 5, 9, -2, 6, 7]
Attempts:
2 left
💡 Hint
Remember that buildHeap starts heapifying from the last parent node up to the root.
Predict Output
intermediate
2:00remaining
Max-Heap Array after Heapify
What is the state of the array after building a max-heap from the given input array?
DSA Javascript
function buildMaxHeap(arr) {
  const n = arr.length;
  function heapify(i) {
    let largest = i;
    const left = 2 * i + 1;
    const right = 2 * i + 2;
    if (left < n && arr[left] > arr[largest]) largest = left;
    if (right < n && arr[right] > arr[largest]) largest = right;
    if (largest !== i) {
      [arr[i], arr[largest]] = [arr[largest], arr[i]];
      heapify(largest);
    }
  }
  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
    heapify(i);
  }
  return arr;
}

const input = [3, 9, 2, 1, 4, 5];
const heap = buildMaxHeap(input);
console.log(heap);
A[9, 4, 5, 1, 3, 2]
B[9, 3, 5, 1, 4, 2]
C[5, 4, 9, 1, 3, 2]
D[9, 4, 2, 1, 3, 5]
Attempts:
2 left
💡 Hint
Max-heap means parent nodes are always greater than children.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Heapify Function
The following heapify function is intended to build a min-heap but produces incorrect output. What is the bug?
DSA Javascript
function heapify(arr, n, i) {
  let smallest = i;
  const left = 2 * i + 1;
  const right = 2 * i + 2;
  if (left < n && arr[left] > arr[smallest]) smallest = left;
  if (right < n && arr[right] > arr[smallest]) smallest = right;
  if (smallest !== i) {
    [arr[i], arr[smallest]] = [arr[smallest], arr[i]];
    heapify(arr, n, smallest);
  }
}
AThe swap operation is missing
BThe indices for left and right children are incorrect
CThe comparison operators should be '<' to build a min-heap, not '>'
DThe recursive call should be heapify(arr, smallest, n)
Attempts:
2 left
💡 Hint
Check the comparison signs for min-heap property.
🧠 Conceptual
advanced
1:30remaining
Time Complexity of Build Heap
What is the time complexity of building a heap from an unsorted array using the heapify method?
AO(n log n)
BO(log n)
CO(n^2)
DO(n)
Attempts:
2 left
💡 Hint
Consider that heapify is called on all non-leaf nodes and work done decreases at lower levels.
🚀 Application
expert
2:30remaining
Resulting Heap After Multiple Insertions
Starting with an empty max-heap, insert the elements [4, 10, 3, 5, 1] one by one. What is the heap array after all insertions?
DSA Javascript
class MaxHeap {
  constructor() {
    this.heap = [];
  }
  insert(val) {
    this.heap.push(val);
    let i = this.heap.length - 1;
    while (i > 0) {
      let parent = Math.floor((i - 1) / 2);
      if (this.heap[parent] < this.heap[i]) {
        [this.heap[parent], this.heap[i]] = [this.heap[i], this.heap[parent]];
        i = parent;
      } else {
        break;
      }
    }
  }
}

const heap = new MaxHeap();
[4, 10, 3, 5, 1].forEach(x => heap.insert(x));
console.log(heap.heap);
A[10, 5, 3, 4, 1]
B[10, 4, 3, 5, 1]
C[5, 10, 3, 4, 1]
D[10, 5, 4, 3, 1]
Attempts:
2 left
💡 Hint
After each insertion, the new element bubbles up to maintain max-heap property.