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 JavaScript 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.js
class Node {
constructor(value, left = null, right = null) {
this.value = value;
this.left = left;
this.right = right;
}
}
function render(node) {
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() {
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
- Each tree node is a JavaScript
Nodeobject withvalue,left, andrightproperties. Missing children are stored asnull, and inserting into anullslot allocates a new node. insert(root, value)is recursive and returns the subtree root after any mutation. The caller assignsroot = insert(root, value), and recursive frames update references withroot.left = ...orroot.right = ....- Comparisons use numeric
Numberordering. Values smaller thanroot.valuego left; theelsebranch sends greater values, and any duplicate values, to the right. - The replay inserts
4at the root, then2left,6right,1under2.left,3under2.right,5under6.left, and7under6.right, ending with4(2(1,3),6(5,7)). render(root)recursively formats node references instead of printing object identities, andconsole.logprints4(2(1,3),6(5,7)). Heap allocation includes the input literal, the sevenNodeobjects, and the strings created while rendering; the replay also shows sorted inserts forming the unbalanced chain1(_,2(_,3(_,4))).