Trees
BST Insert
Insert values into a binary search tree by comparing at each node.
Algorithm
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.
binary search tree
Values smaller than a node go left; larger values go right.