Bird
Raised Fist0
DSA C#programming~20 mins

Heap Concept Structure and Properties in DSA C# - Practice Problems & Challenges

Choose your learning style10 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
What is the output of this Min-Heap after insertions?
Consider a Min-Heap implemented as an array. Insert the following elements in order: 10, 4, 15, 20, 0, 8. What is the array representation of the heap after all insertions?
DSA C#
int[] heap = new int[10];
int size = 0;

void Insert(int val) {
    heap[size] = val;
    int current = size;
    size++;
    while (current > 0 && heap[current] < heap[(current - 1) / 2]) {
        int temp = heap[current];
        heap[current] = heap[(current - 1) / 2];
        heap[(current - 1) / 2] = temp;
        current = (current - 1) / 2;
    }
}

Insert(10);
Insert(4);
Insert(15);
Insert(20);
Insert(0);
Insert(8);

string result = string.Join(", ", heap.Take(size));
Console.WriteLine(result);
A0, 4, 8, 20, 10, 15
B0, 4, 15, 20, 10, 8
C4, 10, 8, 20, 0, 15
D4, 0, 8, 20, 10, 15
Attempts:
2 left
💡 Hint
Remember that in a Min-Heap, the smallest element is always at the root, and each parent is smaller than its children.
🧠 Conceptual
intermediate
1:00remaining
Which property must a Max-Heap always satisfy?
Select the correct property that a Max-Heap must always satisfy.
AEvery parent node is greater than or equal to its children.
BEvery parent node is less than or equal to its children.
CAll leaf nodes have the same value.
DThe heap is always a complete binary tree with all nodes having two children.
Attempts:
2 left
💡 Hint
Think about what makes a Max-Heap different from a Min-Heap.
🔧 Debug
advanced
2:00remaining
Identify the error in this heap insertion code snippet
What error will this C# code produce when inserting into a Min-Heap?
DSA C#
int[] heap = new int[5];
int size = 0;

void Insert(int val) {
    heap[size] = val;
    int current = size;
    size++;
    while (current > 0 && heap[current] > heap[(current - 1) / 2]) {
        int temp = heap[current];
        heap[current] = heap[(current - 1) / 2];
        heap[(current - 1) / 2] = temp;
        current = (current - 1) / 2;
    }
}

Insert(3);
Insert(1);
Insert(6);
Insert(5);
Insert(2);
Insert(4);
AThe heap property is violated because the comparison operator is incorrect for a Min-Heap.
BNo error; the code runs correctly and maintains a Min-Heap.
CIndexOutOfRangeException at Insert(4) because heap array size is exceeded.
DNullReferenceException because heap array is not initialized.
Attempts:
2 left
💡 Hint
Check the array size and number of insertions.
🚀 Application
advanced
1:30remaining
How many elements are in a complete binary heap of height 3?
A complete binary heap has height 3 (root at height 0). How many elements does it contain at minimum and maximum?
AMinimum 7, Maximum 16
BMinimum 7, Maximum 15
CMinimum 8, Maximum 16
DMinimum 8, Maximum 15
Attempts:
2 left
💡 Hint
A complete binary tree is full except possibly the last level, which is filled from left to right.
🧠 Conceptual
expert
1:30remaining
What is the time complexity of building a heap from an unsorted array of n elements?
Choose the correct time complexity for building a heap from an unsorted array of n elements using the optimal heapify method.
AO(n log n)
BO(n)
CO(n^2)
DO(log n)
Attempts:
2 left
💡 Hint
Consider the cost of heapifying nodes starting from the bottom.

Practice

(1/5)
1. What is a key property of a max-heap data structure?
easy
A. Every parent node is greater than or equal to its children
B. Every parent node is less than or equal to its children
C. All leaf nodes have the same value
D. The tree is always a complete binary tree with sorted leaves

Solution

  1. Step 1: Understand max-heap property

    A max-heap requires that each parent node's value is greater than or equal to the values of its children.
  2. Step 2: Compare options with definition

    Every parent node is greater than or equal to its children matches the max-heap property exactly. Every parent node is less than or equal to its children describes a min-heap. Options A and C are incorrect properties.
  3. Final Answer:

    Every parent node is greater than or equal to its children -> Option A
  4. Quick Check:

    Max-heap = parent ≥ children [OK]
Hint: Max-heap means parent ≥ children values [OK]
Common Mistakes:
  • Confusing max-heap with min-heap property
  • Thinking leaves must be sorted
  • Assuming all nodes have equal values
2. Which of the following is the correct way to declare a min-heap using C#'s PriorityQueue?
easy
A. var minHeap = new PriorityQueue();
B. var minHeap = new PriorityQueue(Comparer<int>.Default);
C. var minHeap = new PriorityQueue(Comparer<int>.Create((x, y) => y - x));
D. var minHeap = new PriorityQueue(Comparer<int>.Create((x, y) => x + y));

Solution

  1. Step 1: Recall default behavior of PriorityQueue

    In C#, PriorityQueue by default acts as a min-heap using the natural order of TPriority.
  2. Step 2: Analyze options

    var minHeap = new PriorityQueue(); uses default constructor, creating a min-heap. var minHeap = new PriorityQueue(Comparer<int>.Default); incorrectly tries to pass a comparer to constructor which does not exist. var minHeap = new PriorityQueue(Comparer<int>.Create((x, y) => y - x)); reverses order for max-heap. var minHeap = new PriorityQueue(Comparer<int>.Create((x, y) => x + y)); uses invalid comparer logic.
  3. Final Answer:

    var minHeap = new PriorityQueue<int, int>(); -> Option A
  4. Quick Check:

    Default PriorityQueue is min-heap [OK]
Hint: Default PriorityQueue is min-heap without comparer [OK]
Common Mistakes:
  • Trying to pass comparer to constructor (not supported)
  • Using wrong comparer logic for min-heap
  • Confusing min-heap and max-heap syntax
3. Consider the following C# code using a max-heap implemented as a binary heap array:
int[] heap = { 50, 30, 40, 10, 20 };
// Insert 60 and then heapify up
Insert(heap, 60);
What will be the heap array after insertion?
medium
A. [60, 50, 40, 10, 20, 60]
B. [60, 30, 50, 10, 20, 40]
C. [60, 50, 40, 30, 20, 10]
D. [50, 30, 40, 10, 20, 60]

Solution

  1. Step 1: Insert 60 at the end of heap array

    Initial heap: [50, 30, 40, 10, 20]. Insert 60 at index 5: [50, 30, 40, 10, 20, 60]
  2. Step 2: Heapify up to maintain max-heap

    Compare 60 with parent at index 2 (40). 60 > 40, swap. New array: [50, 30, 60, 10, 20, 40]. Compare 60 with parent at index 0 (50). 60 > 50, swap. Final array: [60, 30, 50, 10, 20, 40]
  3. Final Answer:

    [60, 30, 50, 10, 20, 40] -> Option B
  4. Quick Check:

    Insert + heapify up = [60,30,50,10,20,40] [OK]
Hint: Insert at end, swap up while parent smaller [OK]
Common Mistakes:
  • Not swapping with parent correctly
  • Placing new element at wrong index
  • Confusing heapify up with heapify down
4. The following C# code attempts to remove the root from a max-heap stored in an array but has a bug:
void RemoveRoot(int[] heap, int size) {
    heap[0] = heap[size - 1];
    size--;
    HeapifyDown(heap, 0, size);
}
What is the main issue causing incorrect heap behavior?
medium
A. HeapifyDown is called with wrong starting index
B. The last element is not removed before assignment
C. The size variable is decremented locally but not updated outside
D. The root is not replaced with the maximum child

Solution

  1. Step 1: Analyze size decrement scope

    The size variable is decremented inside the method but since it's passed by value, the caller's size remains unchanged.
  2. Step 2: Effect on heap operations

    Because size outside is not updated, heap operations may access invalid elements or not reflect the reduced heap size, causing incorrect behavior.
  3. Final Answer:

    Size variable is decremented locally but not updated outside -> Option C
  4. Quick Check:

    Size must update outside method [OK]
Hint: Pass size by ref or return new size [OK]
Common Mistakes:
  • Assuming size changes persist without ref
  • Thinking heapify down index is wrong
  • Ignoring size update importance
5. You have a min-heap represented as an array: [5, 10, 15, 20, 25, 30]. You want to replace the root with 22 and restore the min-heap property. Which sequence of array states correctly shows the heap after replacing and heapifying down?
hard
A. [22, 10, 15, 20, 25, 30] -> [10, 22, 15, 20, 25, 30]
B. [22, 10, 15, 20, 25, 30] -> [10, 15, 22, 20, 25, 30]
C. [22, 10, 15, 20, 25, 30] -> [15, 10, 22, 20, 25, 30]
D. [22, 10, 15, 20, 25, 30] -> [10, 20, 15, 22, 25, 30]

Solution

  1. Step 1: Replace root with 22

    Initial heap: [5, 10, 15, 20, 25, 30]. Replace root 5 with 22: [22, 10, 15, 20, 25, 30]
  2. Step 2: Heapify down to restore min-heap

    Compare 22 with children 10 and 15. Smallest child is 10. Swap 22 and 10: [10, 22, 15, 20, 25, 30]. Now 22 at index 1 has children at indices 3 (20) and 4 (25). Smallest is 20 < 22, swap 22 and 20: [10, 20, 15, 22, 25, 30]. 22 now at index 3 has no children, stop.
  3. Final Answer:

    [22, 10, 15, 20, 25, 30] -> [10, 20, 15, 22, 25, 30] -> Option D
  4. Quick Check:

    Replace root + heapify down = [22,10,15,20,25,30] -> [10,20,15,22,25,30] [OK]
Hint: Swap root down with smallest child until heap restored [OK]
Common Mistakes:
  • Swapping with wrong child
  • Stopping heapify too early
  • Confusing min-heap with max-heap rules
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