A BST is a tree where each node has at most two children. The left child's value is less than the parent's value, and the right child's value is greater than the parent's value.
Click to reveal answer
beginner
How do you find the maximum element in a BST?
To find the maximum element, keep moving to the right child until there is no right child. The last node you reach is the maximum element.
Click to reveal answer
beginner
Why does moving right in a BST lead to the maximum element?
Because in a BST, all values in the right subtree are greater than the current node, so the rightmost node holds the largest value.
Click to reveal answer
intermediate
Rust code snippet: What does this function do?
fn find_max(root: &Option<Box<Node>>) -> Option<i32> {
let mut current = root;
while let Some(node) = current {
if node.right.is_none() {
return Some(node.value);
}
current = &node.right;
}
None
}
This function finds the maximum value in a BST by moving right until no right child exists, then returns that node's value.
Click to reveal answer
intermediate
What is the time complexity of finding the maximum element in a BST?
The time complexity is O(h), where h is the height of the tree. In the worst case (skewed tree), it can be O(n), and in a balanced tree, it is O(log n).
Click to reveal answer
In a BST, where is the maximum element located?
AAt the rightmost node
BAt the leftmost node
CAt the root node
DAt any leaf node
✗ Incorrect
The maximum element is always at the rightmost node because right children have greater values.
What should you do if the BST is empty when finding the maximum element?
AReturn the root value
BReturn None or null
CReturn 0
DThrow an error
✗ Incorrect
If the BST is empty, there is no maximum element, so returning None or null is correct.
What is the first step to find the maximum element in a BST?
AMove to the right child
BTraverse all nodes
CCheck the root value
DMove to the left child
✗ Incorrect
You start by moving to the right child because maximum values are on the right.
If a BST has only one node, what is the maximum element?
AThe left child's value
BNo maximum element
CThe root node's value
DThe right child's value
✗ Incorrect
With only one node, that node is both minimum and maximum.
What is the time complexity to find the maximum element in a balanced BST with n nodes?
AO(n log n)
BO(n)
CO(1)
DO(log n)
✗ Incorrect
In a balanced BST, height is about log n, so finding max is O(log n).
Explain step-by-step how to find the maximum element in a BST.
Think about the BST property and where larger values are.
You got /4 concepts.
Write a simple Rust function to find the maximum element in a BST represented with Option>.
Use while let Some(node) = current pattern.
You got /4 concepts.
Practice
(1/5)
1. In a Binary Search Tree (BST), where is the maximum element always located?
easy
A. At any leaf node
B. At the leftmost node
C. At the rightmost node
D. At the root node
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 C
Quick Check:
Maximum = rightmost node [OK]
Hint: Maximum is always the rightmost node in BST [OK]
Common Mistakes:
Confusing maximum with root node
Thinking maximum is at leftmost node
Assuming maximum can be any leaf
2. Which Rust code snippet correctly finds the maximum element in a BST node structure?
easy
A. fn find_max(node: &Option) -> i32 { let mut current = node; while let Some(ref n) = current { if n.right.is_none() { return n.value; } current = &n.right; } unreachable!() }
B. fn find_max(node: &Option) -> i32 { node.unwrap().value }
C. fn find_max(node: &Option) -> i32 { node.as_ref().unwrap().left.unwrap().value }
D. fn find_max(node: &Option) -> i32 { 0 }
Solution
Step 1: Analyze code logic
fn find_max(node: &Option) -> i32 { let mut current = node; while let Some(ref n) = current { if n.right.is_none() { return n.value; } current = &n.right; } unreachable!() } uses a loop to traverse right children until none remain, returning the rightmost node's value.
Step 2: Check other options
fn find_max(node: &Option) -> i32 { node.unwrap().value } returns root value only, C returns left child value, D returns constant 0, all incorrect.
Final Answer:
Iterative right traversal to rightmost node -> Option A
Quick Check:
Traverse right until None = max value [OK]
Hint: Traverse right child until None to find max [OK]
Common Mistakes:
Returning root value without traversal
Accessing left child instead of right
Returning a fixed value ignoring tree
3. What is the output of this Rust code that finds the maximum element in a BST?
struct Node { value: i32, left: Option, right: Option }
fn find_max(node: &Option) -> i32 {
let mut current = node;
while let Some(ref n) = current {
if n.right.is_none() {
return n.value;
}
current = &n.right;
}
unreachable!()
}
fn main() {
let tree = Some(Box::new(Node {
value: 10,
left: Some(Box::new(Node { value: 5, left: None, right: None })),
right: Some(Box::new(Node {
value: 15,
left: None,
right: Some(Box::new(Node { value: 20, left: None, right: None }))
}))
}));
println!("{}", find_max(&tree));
}
medium
A. 10
B. 20
C. 15
D. 5
Solution
Step 1: Trace the tree structure
Root is 10, right child 15, right child's right child 20 (rightmost node).
Step 2: Follow find_max logic
Function moves right until no right child: stops at node with value 20.
Final Answer:
20 -> Option B
Quick Check:
Rightmost node value = 20 [OK]
Hint: Rightmost node value is maximum [OK]
Common Mistakes:
Returning root value instead of rightmost
Confusing left and right children
Not following loop to last right node
4. Identify the bug in this Rust function that tries to find the maximum element in a BST:
fn find_max(node: &Option) -> i32 {
if node.is_none() {
return 0;
}
let mut current = node;
while current.is_some() {
if current.as_ref().unwrap().right.is_none() {
return current.as_ref().unwrap().value;
}
current = ¤t.as_ref().unwrap().left;
}
0
}
medium
A. It unwraps without checking None
B. It returns 0 for empty tree instead of error
C. It uses a loop instead of recursion
D. It traverses left child instead of right child
Solution
Step 1: Analyze traversal direction
Function moves to left child in loop, but max is in right subtree.
Step 2: Identify correct traversal
To find max, must traverse right child until None, not left.
Final Answer:
It traverses left child instead of right child -> Option D
Quick Check:
Max = rightmost node, not left [OK]
Hint: Max element is rightmost, so traverse right [OK]
Common Mistakes:
Going left instead of right
Returning 0 silently for empty tree
Unwrapping without safe checks
5. Given a BST where some nodes have duplicate maximum values on the right subtree, how would you modify the Rust function to return the maximum value correctly?
hard
A. Traverse right until None and return the last node's value
B. Use recursion to check the left subtree and return max value
C. Traverse right and left children to find max value manually
D. Return the root value as maximum if duplicates exist
Solution
Step 1: Understand duplicates in BST
In a BST (allowing duplicates typically on right), the maximum value(s) propagate to the rightmost node.
Step 2: Correct approach
Traverse right until None; this reaches the rightmost node holding the maximum value, even with duplicates.
Final Answer:
Traverse right until None and return the last node's value -> Option A
Quick Check:
Rightmost = max even with duplicates [OK]
Hint: Right traversal finds max even with duplicates [OK]
Common Mistakes:
Using recursion on left subtree
Traversing both subtrees unnecessarily
Returning root value with duplicates
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.