📖 Scenario: Imagine you are organizing a priority queue for tasks where the highest priority task should always be easy to find. A heap is a special tree structure that helps with this by keeping the highest priority item at the top.
🎯 Goal: You will build a simple array representation of a max heap and understand its structure and properties by inserting elements step-by-step and printing the heap array.
📋 What You'll Learn
Create an array called heap with exact values
Create a variable called heap_size to track the number of elements
Write a function parent that returns the parent index of a given index
Print the heap array after insertion
💡 Why This Matters
🌍 Real World
Heaps are used in priority queues, scheduling tasks, and efficient sorting algorithms like heapsort.
💼 Career
Understanding heaps is important for software engineers working on performance-critical applications and system design.
Progress0 / 4 steps
1
Create the initial heap array
Create an integer array called heap with these exact values: 20, 15, 18, 8, 10. Also create an integer variable called heap_size and set it to 5.
DSA C
Hint
Use curly braces to initialize the array with the exact numbers.
2
Add a function to find the parent index
Add a function called parent that takes an integer i and returns the integer value of the parent index using the formula (i - 1) / 2.
DSA C
Hint
The parent index of a node at index i in a heap is (i - 1) / 2.
3
Use the parent function to print parent indices
Write a for loop that iterates i from 1 to heap_size - 1. Inside the loop, print the parent index of i using the parent function. Use printf("Parent of %d is %d\n", i, parent(i));.
DSA C
Hint
Start the loop from 1 because the root at index 0 has no parent.
4
Print the heap array elements
Write a for loop that iterates i from 0 to heap_size - 1. Inside the loop, print each element of heap using printf("%d ", heap[i]);. After the loop, print a newline with printf("\n");.
DSA C
Hint
Print all elements in one line separated by spaces, then print a newline.
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 but unordered
Solution
Step 1: Understand max-heap property
A max-heap requires each parent node to be greater than or equal to its children to maintain the heap order.
Step 2: Check other options
Every parent node is less than or equal to its children describes a min-heap, C is not true for heaps, and D is partially true but incomplete without heap order.
Final Answer:
Every parent node is greater than or equal to its children -> Option A
Quick Check:
Max-heap = Parent ≥ Children [OK]
Hint: Max-heap means parent ≥ children always [OK]
Common Mistakes:
Confusing max-heap with min-heap property
Thinking all leaf nodes have same value
Ignoring heap order property
2. Which of the following is the correct way to represent a heap in C using an array?
easy
A. Parent at index i, left child at i/2, right child at i/2 + 1
B. Parent at index i, left child at i - 1, right child at i + 1
C. Parent at index i, left child at 2*i + 1, right child at 2*i + 2
D. Parent at index i, left child at 2*i, right child at 2*i + 1
Solution
Step 1: Recall array indexing for heap
In zero-based arrays, left child index = 2*i + 1 and right child index = 2*i + 2 for parent at i.
Step 2: Verify options
Parent at index i, left child at 2*i + 1, right child at 2*i + 2 matches zero-based indexing. Parent at index i, left child at 2*i, right child at 2*i + 1 is for one-based indexing. Options A and C are incorrect formulas.
Final Answer:
Parent at index i, left child at 2*i + 1, right child at 2*i + 2 -> Option C
Quick Check:
Zero-based heap indexing = 2*i+1, 2*i+2 [OK]
Hint: Zero-based heap uses 2*i+1 and 2*i+2 for children [OK]
Common Mistakes:
Using one-based indexing formulas in zero-based arrays
Mixing up left and right child formulas
Using division instead of multiplication for child indices
3. Consider the following max-heap array representation: [40, 30, 35, 15, 10, 25]. What will be the array after inserting 50 and re-heapifying?
medium
A. [50, 30, 40, 15, 10, 25, 35]
B. [40, 30, 35, 15, 10, 25, 50]
C. [50, 40, 35, 15, 30, 25, 10]
D. [40, 35, 30, 15, 10, 25, 50]
Solution
Step 1: Insert 50 at the end
Array becomes [40, 30, 35, 15, 10, 25, 50].
Step 2: Re-heapify by bubbling up 50
Parent of index 6 is (6-1)//2=2 (35 < 50), swap 6 and 2: [40, 30, 50, 15, 10, 25, 35]. Now at 2, parent 0 (40 < 50), swap 2 and 0: [50, 30, 40, 15, 10, 25, 35]. Heap property restored.
Final Answer:
[50, 30, 40, 15, 10, 25, 35] -> Option A
Quick Check:
Insert 50, bubble up to root [OK]
Hint: Insert at end, bubble up until parent ≥ node [OK]
Common Mistakes:
Not bubbling up after insertion
Swapping with wrong parent index
Leaving new element at the end without re-heapify
4. The following C code snippet is intended to heapify a subtree rooted at index i in a max-heap array arr of size n. What is the error?
void heapify(int arr[], int n, int i) {
int largest = i;
int left = 2 * i + 1;
int 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) {
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapify(arr, n, largest);
}
}
medium
A. Swapping elements before checking if largest changed
B. Incorrect calculation of left and right child indices
C. Missing base case to stop recursion
D. No error; code correctly heapifies the subtree
Solution
Step 1: Analyze child index calculation
Left and right child indices are correctly calculated as 2*i+1 and 2*i+2 for zero-based arrays.
Step 2: Check recursion and swapping logic
Swapping happens only if largest changes, then recursive call heapifies the affected subtree. No base case needed explicitly as recursion stops when largest == i.
Final Answer:
No error; code correctly heapifies the subtree -> Option D
Quick Check:
Heapify logic correct and complete [OK]
Hint: Heapify swaps and recurses only if needed [OK]
Common Mistakes:
Thinking explicit base case needed for recursion
Miscomputing child indices
Swapping unconditionally without checking largest
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. What will be the resulting array after heapifying?
hard
A. [10, 20, 15, 30, 25, 22]
B. [10, 20, 15, 22, 25, 30]
C. [15, 20, 22, 30, 25, 10]
D. [22, 10, 15, 20, 25, 30]
Solution
Step 1: Replace root with 22
Array becomes [22, 10, 15, 20, 25, 30].
Step 2: Heapify down from root
Compare 22 with children 10 and 15. 10 is smallest, swap 22 and 10: [10, 22, 15, 20, 25, 30]. Then heapify at index 1: compare 22 with children 20 and 25, 20 is smaller, swap: [10, 20, 15, 22, 25, 30]. No further swaps needed.
Final Answer:
[10, 20, 15, 22, 25, 30] -> Option B
Quick Check:
Replace root, bubble down to restore min-heap [OK]
Hint: Replace root, swap with smaller child until heap restored [OK]
Common Mistakes:
Swapping with larger child instead of smaller
Not continuing heapify after first swap
Confusing min-heap with max-heap rules
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.