What if you could find the biggest thing in a huge pile without looking at every single item?
Why BST Find Maximum Element in DSA Go?
Imagine you have a messy pile of books with different heights, and you want to find the tallest one. You start picking up each book one by one, checking its height, and comparing it with the tallest you found so far.
This manual way is slow and tiring because you have to check every single book. If the pile is huge, it takes a lot of time and you might lose track or make mistakes.
A Binary Search Tree (BST) organizes books so that the tallest book is always at one end. To find the tallest book, you just follow the path to the rightmost book, saving time and effort.
maxHeight := books[0] for i := 1; i < len(books); i++ { if books[i] > maxHeight { maxHeight = books[i] } }
func findMax(node *Node) int {
current := node
for current.Right != nil {
current = current.Right
}
return current.Value
}This lets you quickly find the largest value in a sorted structure without checking every element.
In a phone contact list sorted by names, finding the last contact alphabetically is like finding the maximum element in a BST.
Manual search checks every item and is slow.
BST stores data so max is always at the rightmost node.
Finding max in BST is fast and simple by going right.
Practice
Solution
Step 1: Understand BST property
In a BST, all nodes to the right of a node have greater values.Step 2: Locate maximum element
The maximum element is found by moving to the rightmost node, as it has no greater right child.Final Answer:
At the rightmost node -> Option BQuick Check:
Maximum = rightmost node [OK]
- Confusing maximum with root node
- Thinking maximum is at leftmost node
- Assuming maximum can be any leaf
Solution
Step 1: Check loop condition for maximum
Maximum is found by moving right until no right child exists.Step 2: Verify code correctness
for current.Right != nil { current = current.Right } return current.Value correctly loops while current.Right is not nil, then returns current.Value.Final Answer:
for current.Right != nil { current = current.Right } return current.Value -> Option CQuick Check:
Loop right child until nil = max [OK]
- Looping left child instead of right
- Returning root value without traversal
- Loop condition incorrect or infinite
type Node struct {
Value int
Left *Node
Right *Node
}
func findMax(root *Node) int {
current := root
for current.Right != nil {
current = current.Right
}
return current.Value
}
root := &Node{Value: 10}
root.Left = &Node{Value: 5}
root.Right = &Node{Value: 15}
root.Right.Right = &Node{Value: 20}
fmt.Println(findMax(root))Solution
Step 1: Trace the BST structure
Root is 10, right child 15, right-right child 20 (rightmost node).Step 2: Follow findMax function
Function moves right until current.Right is nil, stopping at node with value 20.Final Answer:
20 -> Option AQuick Check:
Rightmost node value = 20 [OK]
- Returning root value instead of rightmost
- Stopping at first right child
- Confusing left and right pointers
func findMax(root *Node) int {
current := root
for current.Left != nil {
current = current.Left
}
return current.Value
}Solution
Step 1: Analyze traversal direction
The code loops while current.Left != nil, moving left, which finds minimum, not maximum.Step 2: Check for other issues
Function does not check if root is nil, which can cause runtime error.Final Answer:
It incorrectly traverses left children instead of right; does not handle nil root; returns minimum instead of maximum -> Option AQuick Check:
Left traversal + no nil check = bugs [OK]
- Using left instead of right pointer
- Ignoring nil root check
- Assuming code finds maximum correctly
Solution
Step 1: Understand duplicates in BST
In a BST allowing duplicates on right, right subtree values are >= current value.Step 2: Best traversal for maximum
Traverse right while current.Right != nil only. Value checks like in C (>) stop early on equal duplicates before larger values (e.g., 10->10->12).Final Answer:
Traverse right while current.Right != nil only -> Option DQuick Check:
Structural rightmost traversal = max even with duplicates [OK]
- Using strict > comparison, stopping early on equals
- Traversing left instead of right
- Returning root value without traversal
Ready to prove it?
Pass the test and this pattern moves unknown
