What if you could find anything in a huge list almost instantly, without flipping every page?
Why BST Search Operation in DSA Typescript?
Imagine you have a huge phone book with thousands of names written in no particular order. You want to find a friend's phone number, but you have to look through every single page one by one.
Searching manually through an unordered list is slow and tiring. It's easy to lose your place or miss the name you want. This wastes time and causes frustration.
A Binary Search Tree (BST) organizes data so you can quickly decide whether to look left or right, cutting down the search time drastically. It's like having a phone book sorted alphabetically, so you jump directly to the right section.
function searchInList(list: number[], target: number): boolean {
for (let i = 0; i < list.length; i++) {
if (list[i] === target) return true;
}
return false;
}function searchBST(node: TreeNode | null, target: number): boolean {
if (!node) return false;
if (node.value === target) return true;
if (target < node.value) return searchBST(node.left, target);
else return searchBST(node.right, target);
}It enables lightning-fast searches in large sorted data, saving time and effort.
When you search for a contact on your phone, the system uses a structure like a BST to find the name quickly instead of scanning every contact.
Manual search is slow and error-prone for large data.
BST search uses order to jump directly to the target.
This makes searching efficient and scalable.
Practice
search operation in a Binary Search Tree (BST)?Solution
Step 1: Understand the purpose of search in BST
The search operation is designed to check if a specific value is present in the BST.Step 2: Differentiate from other operations
Insertion adds new values, deletion removes values, and traversal visits all nodes. Search only checks existence.Final Answer:
To find whether a given value exists in the BST -> Option CQuick Check:
Search = Find value presence [OK]
- Confusing search with insert or delete
- Thinking search returns all nodes
- Assuming search modifies the tree
Solution
Step 1: Analyze parameter types
The search needs the root node (which can be null) and the value to find (a number).Step 2: Analyze return type
Search returns true or false, so return type should be boolean.Final Answer:
function search(root: TreeNode | null, value: number): boolean -> Option AQuick Check:
Correct params and boolean return [OK]
- Using wrong parameter types
- Returning void instead of boolean
- Using string instead of number for value
search(root, 7), what will be the output?BST structure:
10
/ \
5 15
/ \ \
3 7 20
Code snippet:
function search(root: TreeNode | null, value: number): boolean {
if (!root) return false;
if (root.val === value) return true;
if (value < root.val) return search(root.left, value);
return search(root.right, value);
}
console.log(search(root, 7));Solution
Step 1: Trace search for value 7
Start at root 10: 7 < 10, go left to 5. Then 7 > 5, go right to 7.Step 2: Check node value
Node value is 7, matches search value, so return true.Final Answer:
true -> Option DQuick Check:
Found 7 in BST = true [OK]
- Stopping search too early
- Confusing left and right child directions
- Returning false when node matches
function search(root: TreeNode | null, value: number): boolean {
if (root === null) return false;
if (root.val === value) return true;
if (value > root.val) return search(root.left, value);
else return search(root.right, value);
}Solution
Step 1: Check recursive calls logic
For BST, if value > root.val, search should go right, but code goes left.Step 2: Confirm swapped children calls
Similarly, else goes right instead of left. So left and right calls are swapped.Final Answer:
The recursive calls to left and right children are swapped -> Option BQuick Check:
Left/right calls swapped = bug [OK]
- Mixing left and right child in recursion
- Ignoring base case (though present here)
- Wrong comparison operators
Choose the correct approach:
Solution
Step 1: Understand duplicate placement in BST
Duplicates are stored in right subtree, so first occurrence is the leftmost matching node.Step 2: Modify search to find first occurrence
When value equals current node, continue searching left subtree to find earlier occurrence.Final Answer:
Always search left subtree when value equals current node's value -> Option AQuick Check:
Search left on equal to find first duplicate [OK]
- Stopping search immediately on equal
- Searching right subtree on equal
- Doing full inorder traversal unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
