Trees
BST Insert
Insert values into a binary search tree by comparing at each node.
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.
binary search tree
Values smaller than a node go left; larger values go right.
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)));
}
function insert(root, value) { if (root === null) return new Node(value); if (value < root.value) root.left = insert(root.left, value); else root.right = insert(root.right, value); return root; }
let root = null;
for (const value of [4, 2, 6, 1, 3, 5, 7]) root = insert(root, value);
console.log(render(root));
Complexity
- Time: O(h) per insert
- Space: O(n)
Implementation notes
Nodeis a TypeScript class withvalue: number,left: Node | null, andright: Node | nullfields. The constructor defaults both child references tonull.- The compact
insert(root, value)helper in the checked source omits parameter annotations, but it operates onNode | nullroots and numeric values. Inserting intonullallocatesnew Node(value). - Recursive inserts mutate object references with
root.left = insert(...)orroot.right = insert(...), then return the same subtree root to the caller. - The comparison
value < root.valuesends smaller numbers left; theelsebranch sends greater values, and any duplicates, right. - The replay inserts
4,2,6,1,3,5, and7, ending with4(2(1,3),6(5,7)). It also records sorted inserts[1, 2, 3, 4]forming the unbalanced chain1(_,2(_,3(_,4))). render(root)formats node references into4(2(1,3),6(5,7))forconsole.log. Visible allocation is the input literal, the allocatedNodeobjects, and render/output strings; mutation is the left/right reference wiring.