What if you could find the smallest item instantly without searching everything?
Why BST Find Minimum Element in DSA C?
Imagine you have a messy pile of books with no order. You want to find the oldest book, but you have to check every single one by hand.
Looking through every book one by one takes a lot of time and effort. You might miss some or get tired and make mistakes.
A Binary Search Tree (BST) keeps books sorted so the oldest book is always easy to find by just going left until you can't go further.
int findMin(int arr[], int size) {
int min = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] < min) min = arr[i];
}
return min;
}struct Node* findMin(struct Node* root) {
while (root && root->left != NULL) {
root = root->left;
}
return root;
}This lets you quickly find the smallest value without checking every item, saving time and effort.
In a phone contact list sorted by name, finding the first contact alphabetically is like finding the minimum in a BST.
Manual search is slow and error-prone.
BST structure keeps data sorted for fast minimum lookup.
Finding minimum means going left until no more left child.
Practice
Solution
Step 1: Understand BST property
In a BST, left child nodes have smaller values than their parent nodes.Step 2: Locate minimum element
Because smaller values go left, the minimum is at the leftmost node.Final Answer:
At the leftmost node -> Option AQuick Check:
Minimum element = leftmost node [OK]
- Thinking minimum is at root
- Confusing leftmost with rightmost
- Assuming minimum can be any leaf
Solution
Step 1: Check loop condition for minimum
Minimum is found by moving left while left child exists.Step 2: Verify code correctness
while(root->left != NULL) root = root->left; return root->data; moves left until no left child, then returns data correctly.Final Answer:
while(root->left != NULL) root = root->left; return root->data; -> Option BQuick Check:
Traverse left to find minimum [OK]
- Traversing right child instead of left
- Returning root data without traversal
- Incorrect loop condition
struct Node {
int data;
struct Node* left;
struct Node* right;
};
struct Node* findMin(struct Node* root) {
while(root->left != NULL) {
root = root->left;
}
return root;
}
// Assume BST is:
// 10
// / \
// 5 15
// /
// 2
int main() {
struct Node n2 = {2, NULL, NULL};
struct Node n5 = {5, &n2, NULL};
struct Node n15 = {15, NULL, NULL};
struct Node n10 = {10, &n5, &n15};
struct Node* minNode = findMin(&n10);
printf("%d", minNode->data);
return 0;
}Solution
Step 1: Trace findMin function
Function moves left from root 10 to 5, then to 2, stops as 2 has no left child.Step 2: Identify returned node data
Returned node is 2, so printf prints 2.Final Answer:
2 -> Option CQuick Check:
Leftmost node data = 2 [OK]
- Confusing leftmost with root
- Assuming right child is minimum
- Not following pointer traversal
struct Node* findMin(struct Node* root) {
while(root->left == NULL) {
root = root->left;
}
return root;
}Solution
Step 1: Analyze loop condition
Loop runs while root->left == NULL, which means it stops if left child exists, so it never moves left.Step 2: Correct loop condition
It should run while root->left != NULL to move left until no left child.Final Answer:
Loop condition should be root->left != NULL -> Option AQuick Check:
Traverse left while left child exists [OK]
- Using == NULL instead of != NULL in loop
- Ignoring NULL root check
- Confusing left and right pointers
findMin function to safely find the minimum element without causing a runtime error if the tree is empty?Solution
Step 1: Handle empty tree case
Check if root is NULL at start to avoid dereferencing NULL pointer.Step 2: Traverse left children safely
If root is not NULL, move left while left child exists to find minimum.Final Answer:
Add a check at start: if(root == NULL) return NULL; then traverse left -> Option DQuick Check:
Check NULL root before traversal [OK]
- Not checking for empty tree causing crash
- Traversing right child for minimum
- Missing base case in recursion
Ready to prove it?
Pass the test and this pattern moves unknown
