What if you could find the biggest number instantly without checking every single one?
Why BST Find Maximum Element in DSA Java?
Imagine you have a messy stack of papers with numbers written on them, and you want to find the biggest number. You start flipping through each paper one by one, hoping to spot the largest number. This takes a lot of time and you might miss some papers or get tired.
Looking for the biggest number by checking every paper is slow and tiring. You can easily lose track or make mistakes. If the pile grows bigger, it becomes almost impossible to find the largest number quickly.
A Binary Search Tree (BST) organizes numbers so that the biggest number is always at the far right. To find the maximum, you just keep moving right until you can't go further. This saves time and effort, making the search quick and simple.
int findMax(int[] numbers) {
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) max = numbers[i];
}
return max;
}int findMax(Node root) {
Node current = root;
while (current.right != null) {
current = current.right;
}
return current.value;
}This lets you find the largest value in a sorted tree instantly by just following the right path.
Think of a phone book sorted by last names. To find the last name that comes last alphabetically, you just look at the last page instead of flipping through every page.
Manual search checks every item, which is slow and error-prone.
BST stores data so the largest is always at the far right.
Finding max in BST means just moving right until no more right child exists.
Practice
Solution
Step 1: Understand BST property
In a BST, left child nodes are smaller and right child nodes are larger than the parent node.Step 2: Locate maximum element
The maximum element is the rightmost node because it has no larger right child.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
Node?Solution
Step 1: Check traversal direction for maximum
Maximum is found by moving right until no right child exists.Step 2: Verify method logic
public int findMax(Node root) { while(root.right != null) root = root.right; return root.data; } correctly loops while root.right is not null, then returns root.data.Final Answer:
public int findMax(Node root) { while(root.right != null) root = root.right; return root.data; } -> Option AQuick Check:
Traverse right to find max [OK]
- Looping left child instead of right
- Returning root data without traversal
- Not checking for null root
class Node {
int data;
Node left, right;
Node(int d) { data = d; left = right = null; }
}
public class BST {
public static int findMax(Node root) {
while(root.right != null) root = root.right;
return root.data;
}
public static void main(String[] args) {
Node root = new Node(10);
root.left = new Node(5);
root.right = new Node(20);
root.right.right = new Node(30);
System.out.println(findMax(root));
}
}Solution
Step 1: Trace the BST structure
Root=10, left=5, right=20, right.right=30. Maximum is rightmost node 30.Step 2: Follow findMax method
Loop moves from 10 to 20 to 30, then stops as 30.right is null, returns 30.Final Answer:
30 -> Option BQuick Check:
Rightmost node data = 30 [OK]
- Returning root data without traversal
- Confusing left and right children
- Ignoring right.right node
public int findMax(Node root) {
if(root == null) return -1;
while(root.left != null) {
root = root.left;
}
return root.data;
}Solution
Step 1: Analyze traversal direction
Maximum is found by moving right, but code moves left incorrectly.Step 2: Correct the while loop
Change while(root.left != null) to while(root.right != null) to find max correctly.Final Answer:
Change root.left to root.right in while loop -> Option CQuick Check:
Traverse right child for max [OK]
- Looping left child instead of right
- Returning wrong default value
- Thinking recursion is mandatory
public int findMaxWithDuplicates(Node root) {
if(root == null) return Integer.MIN_VALUE;
int maxVal = root.data;
while(root.right != null) {
root = root.right;
if(root.data > maxVal) maxVal = root.data;
}
return maxVal;
}
What is the output of findMaxWithDuplicates for this BST?
Root=15, root.left=10, root.right=20, root.right.right=20, root.right.right.right=25Solution
Step 1: Understand BST with duplicates
Duplicates can appear on right subtree; max is still rightmost largest value.Step 2: Trace method execution
Traverse right: 15 -> 20 -> 20 -> 25; maxVal updates to 25 at last node.Final Answer:
25 -> Option AQuick Check:
Rightmost node data = 25 [OK]
- Stopping at first duplicate max value
- Assuming duplicates cause errors
- Ignoring rightmost traversal
Ready to prove it?
Pass the test and this pattern moves unknown
