What if you could find the biggest number instantly without looking at every single one?
Why BST Find Maximum Element in DSA C++?
Imagine you have a messy pile of books with different heights, and you want to find the tallest book. If you try to check each book one by one, it will take a lot of time and effort.
Manually searching for the tallest book means looking at every single book, which is slow and tiring. You might lose track or miss some books, making mistakes easy.
A Binary Search Tree (BST) organizes books so that taller books are always to the right. To find the tallest book, you just keep moving right until you can't go further. This saves time and effort.
int findMax(int arr[], int size) {
int max = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}int findMax(Node* root) {
Node* current = root;
while (current->right != nullptr) {
current = current->right;
}
return current->data;
}This lets you quickly find the largest value in a sorted structure without checking every item.
In a phone contact list sorted by name, finding the last contact alphabetically is like finding the maximum in a BST.
Manual search checks every item, which is slow.
BST stores data so max is always at the rightmost node.
Finding max in BST is fast and simple by moving right.
Practice
Solution
Step 1: Understand BST property
In a BST, left child nodes have smaller values and right child nodes have larger values than their parent.Step 2: Locate maximum element
The maximum element is the rightmost node because it has no right child and is greater than all other nodes.Final Answer:
At the rightmost node -> Option DQuick Check:
Maximum = rightmost node [OK]
- Confusing maximum with root node
- Thinking maximum is at leftmost node
- Assuming maximum can be any leaf
root?Solution
Step 1: Check traversal direction for maximum
Maximum is found by moving right until no right child exists.Step 2: Verify code correctness
int findMax(Node* root) { while(root->right) root = root->right; return root->data; } correctly loops whileroot->rightexists and returnsroot->data.Final Answer:
int findMax(Node* root) { while(root->right) root = root->right; return root->data; } -> Option CQuick Check:
Traverse right child to find max [OK]
- Traversing left child instead of right
- Returning root data without traversal
- Using parent pointer which may not exist
struct Node {
int data;
Node* left;
Node* right;
};
Node* root = new Node{10, nullptr, nullptr};
root->right = new Node{20, nullptr, nullptr};
root->right->right = new Node{30, nullptr, nullptr};
int findMax(Node* root) {
while(root->right) root = root->right;
return root->data;
}
std::cout << findMax(root) << std::endl;Solution
Step 1: Trace the BST structure
Root is 10, right child 20, right child's right child 30.Step 2: Follow findMax function
Loop moves from 10 to 20, then 20 to 30, then stops as 30 has no right child.Final Answer:
30 -> Option AQuick Check:
Rightmost node data = 30 [OK]
- Returning root data without traversal
- Confusing left and right pointers
- Assuming runtime error due to nullptr
int findMax(Node* root) {
if (root == nullptr) return -1;
while(root->left) {
root = root->left;
}
return root->data;
}Solution
Step 1: Analyze traversal direction
The function incorrectly traverses left child to find maximum, but maximum is at rightmost node.Step 2: Correct traversal logic
Changewhile(root->left)towhile(root->right)to find maximum correctly.Final Answer:
Should traverse right child, not left child -> Option AQuick Check:
Maximum = rightmost node, not leftmost [OK]
- Traversing left child instead of right
- Ignoring nullptr check
- Returning wrong default value
struct Node {
int data;
Node* left;
Node* right;
};
// Function to find max element
int findMax(Node* root) {
// Your code here
}Solution
Step 1: Understand duplicates in BST
Even with duplicates allowed on the right subtree, BST property ensures right subtree values are >= parent, so maximum is always the rightmost node.Step 2: Correct traversal for maximum
Traverse right whileroot->rightexists only. No data comparison needed due to BST invariants.Final Answer:
Traverse right while root->right exists only -> Option BQuick Check:
Traverse right child pointer until null [OK]
- Using strict > check which stops early on duplicates
- Traversing left instead of right
- Returning root data without traversal
Ready to prove it?
Pass the test and this pattern moves unknown
