Searching in BST in Data Structures Theory - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When searching for a value in a Binary Search Tree (BST), we want to know how the time to find that value changes as the tree grows.
We ask: How many steps does it take to find a value when the tree has more nodes?
Analyze the time complexity of the following code snippet.
function searchBST(node, target) {
if (node == null) return false;
if (node.value == target) return true;
if (target < node.value) {
return searchBST(node.left, target);
} else {
return searchBST(node.right, target);
}
}
This code searches for a target value by moving left or right depending on comparisons, stopping when it finds the value or reaches a leaf.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive call moving down one level in the tree.
- How many times: At most once per tree level, until the value is found or a leaf is reached.
Each step moves down one level of the tree, so the number of steps depends on the tree's height.
| Input Size (n) | Approx. Operations (steps) |
|---|---|
| 10 | About 3 to 4 steps |
| 100 | About 6 to 7 steps |
| 1000 | About 9 to 10 steps |
Pattern observation: The steps grow slowly, roughly proportional to the tree height, which is often much smaller than the total number of nodes.
Time Complexity: O(h)
This means the time to search depends on the height of the tree, not directly on the total number of nodes.
[X] Wrong: "Searching a BST always takes time proportional to the number of nodes, O(n)."
[OK] Correct: Because BST search moves down one path, it only visits nodes along that path, which is at most the tree height, not all nodes.
Understanding how BST search time depends on tree height helps you explain why balanced trees are important and shows you can analyze data structures beyond simple arrays.
"What if the BST is perfectly balanced versus completely skewed? How would the time complexity change?"
Practice
Solution
Step 1: Understand BST property
A BST keeps elements ordered so smaller values are on the left and larger on the right.Step 2: Use order for searching
This order lets us decide to go left or right, skipping half the tree each step, making search faster.Final Answer:
It allows faster search by using the order of elements -> Option AQuick Check:
BST order speeds search = It allows faster search by using the order of elements [OK]
- Thinking BST stores elements randomly
- Confusing BST with hashing
- Assuming linear search in BST
Solution
Step 1: Recall BST search rule
If the target is smaller than the current node's value, we move to the left child.Step 2: Apply rule to options
Go left if target is smaller than current node correctly states to go left if target is smaller, which matches BST property.Final Answer:
Go left if target is smaller than current node -> Option BQuick Check:
Smaller target -> left child = Go left if target is smaller than current node [OK]
- Reversing left and right directions
- Ignoring BST ordering rules
- Always going to root node
15
/ \
10 20
/ / \
8 17 25Which nodes will be visited when searching for the value
17?Solution
Step 1: Start at root and compare with 17
Root is 15. Since 17 > 15, move right to 20.Step 2: Compare 20 with 17
17 < 20, so move left to 17, which matches the target.Final Answer:
[15, 20, 17] -> Option DQuick Check:
Path to 17 = 15 -> 20 -> 17 [OK]
- Going left from 15 when target is larger
- Skipping nodes in path
- Confusing node values
None even when the value exists. What is the most likely mistake?Solution
Step 1: Understand BST search logic
Search must move left if target is smaller, right if larger.Step 2: Identify error in always moving left
If code always moves left, it misses nodes on the right side where target might be.Final Answer:
Always moving to left child regardless of target -> Option CQuick Check:
Wrong direction causes search failure = Always moving to left child regardless of target [OK]
- Ignoring right subtree
- Checking only root node
- Using wrong data structure for traversal
Solution
Step 1: Understand duplicates in BST
Duplicates are stored in right subtree, so multiple matches can exist there.Step 2: Adapt search to find all matches
When a node equals target, search both left (for smaller) and right (for duplicates) subtrees to find all occurrences.Final Answer:
Traverse both left and right subtrees when node equals target -> Option AQuick Check:
Check both sides for duplicates = Traverse both left and right subtrees when node equals target [OK]
- Stopping after first match
- Ignoring right subtree duplicates
- Searching only one subtree
