Trees
BST Search
Search a binary search tree for one present and one absent value.
Algorithm
The canonical tree is 4(2(1,3),6(5,7)), so this TypeScript DSA
implementation can be compared directly with the rest of the DSA track.
search path
A comparison chooses one subtree at each step, so whole branches are skipped.
Visual walkthrough
Basic Implementation
basic.ts
class Node {
value: number;
left: Node | null;
right: Node | null;
constructor(value: number, left: Node | null = null, right: Node | null = null) {
this.value = value;
this.left = left;
this.right = right;
}
}
function render(node: Node | null): string {
if (node === null) return "_";
if (node.left === null && node.right === null) return String(node.value);
return `${node.value}(${render(node.left)},${render(node.right)})`;
}
function sampleTree(): Node {
return new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)));
}
const root = sampleTree();
function search(root, target) { let node = root; while (node !== null) { if (target === node.value) return true; node = target < node.value ? node.left : node.right; } return false; }
console.log(search(root, 5) ? "5 found" : "5 not found");
console.log(search(root, 8) ? "8 found" : "8 not found");
Complexity
- Time: O(h) per search
- Space: O(1) iterative
Implementation notes
Nodeis a TypeScript class withvalue: number,left: Node | null, andright: Node | nullfields. The sample tree stores missing children asnull.- The compact
search(root, target)helper in the checked source omits parameter annotations, but it traversesNode | nullreferences and numeric targets. - Search is iterative:
let node = rootholds the cursor, andwhile (node !== null)stops when traversal falls off the tree. target === node.valuereturnstrueon a match. Otherwisetarget < node.value ? node.left : node.rightchooses the next nullable reference using numeric comparison.- The replay searches
5through4 -> right,6 -> left, then5 -> match. It searches8through4 -> right,6 -> right,7 -> right, then reachesnulland returnsfalse. - The two
console.logcalls print5 foundand8 not found. Visible allocation is the seven-node sample tree and output strings; the search does not mutate nodes and only reassigns the cursor.