BST Find Maximum Element in DSA Javascript - Time & Space Complexity
We want to know how long it takes to find the largest value in a Binary Search Tree (BST).
Specifically, how does the time grow as the tree gets bigger?
Analyze the time complexity of the following code snippet.
function findMax(root) {
if (!root) return null;
let current = root;
while (current.right !== null) {
current = current.right;
}
return current.value;
}
This code finds the maximum value by moving right until no more right child exists.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Moving from one node to its right child.
- How many times: At most once per level down the right side of the tree.
As the tree grows, the number of steps depends on the height of the rightmost path.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 4-5 steps (if tree is balanced) |
| 100 | Up to 7-8 steps (balanced tree height) |
| 1000 | Up to 10 steps (balanced tree height) |
Pattern observation: The steps grow slowly with tree height, not total nodes.
Time Complexity: O(h)
This means the time depends on the tree height, which is the longest path from root to leaf.
[X] Wrong: "Finding max always takes time proportional to the number of nodes (n)."
[OK] Correct: We only follow the right children, so time depends on tree height, not total nodes.
Understanding how tree height affects search time helps you explain efficiency clearly in interviews.
"What if the BST is unbalanced and looks like a linked list? How would the time complexity change?"
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 largest value, so it must be the rightmost node in the tree.Final Answer:
At the rightmost node -> Option DQuick Check:
Maximum = rightmost node [OK]
- Thinking maximum is at the root
- Confusing leftmost with maximum
- Assuming maximum can be any leaf
left and right properties?Solution
Step 1: Check traversal direction
To find maximum, we must move right until no more right child exists.Step 2: Verify code correctness
function findMax(node) { while(node.right) { node = node.right; } return node.value; } correctly loops whilenode.rightexists, then returnsnode.value.Final Answer:
function findMax(node) { while(node.right) { node = node.right; } return node.value; } -> Option AQuick Check:
Traverse rightmost node to get max [OK]
- Looping left child instead of right
- Returning root value without traversal
- Recursing incorrectly on left child
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
const root = new Node(10);
root.left = new Node(5);
root.right = new Node(15);
root.right.right = new Node(20);
function findMax(node) {
while(node.right) {
node = node.right;
}
return node.value;
}
console.log(findMax(root));Solution
Step 1: Trace the tree structure
Root is 10, right child 15, right of 15 is 20. The rightmost node is 20.Step 2: Follow findMax function
The function moves right until no right child. It stops at node with value 20 and returns it.Final Answer:
20 -> Option AQuick Check:
Rightmost node value = 20 [OK]
- Returning root value instead of max
- Confusing left and right children
- Not following loop to last right node
function findMax(node) {
if (!node.right) {
return node.value;
}
return findMax(node.left);
}Solution
Step 1: Analyze recursion direction
The code checks ifnode.rightis null, then returnsnode.value. Otherwise, it recurses onnode.left.Step 2: Identify correct recursion path
To find max, recursion must go right, not left. So it should recurse onnode.right.Final Answer:
It should recurse on node.right, not node.left -> Option CQuick Check:
Max found by going right child [OK]
- Recursing left child instead of right
- Returning wrong node value
- Thinking loop is mandatory over recursion
function findMax(node) {
while(node.right && node.right.value >= node.value) {
node = node.right;
}
return node.value;
}What is the main reason for the condition
node.right.value >= node.value in the loop?Solution
Step 1: Understand duplicates in BST
Duplicates allowed only on right subtree means equal values can appear on right child nodes.Step 2: Analyze loop condition
The loop moves right while right child exists and its value is greater or equal to current node, ensuring duplicates are included in max search.Final Answer:
To move right only if the right child is greater or equal, handling duplicates correctly -> Option BQuick Check:
Right child >= current node handles duplicates [OK]
- Ignoring duplicates on right subtree
- Using strict greater than instead of greater or equal
- Confusing left subtree duplicates
Ready to prove it?
Pass the test and this pattern moves unknown
