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 PHP 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.php
<?php
class Node {
public int $value;
public ?Node $left;
public ?Node $right;
public function __construct(int $value, ?Node $left = null, ?Node $right = null) {
$this->value = $value; $this->left = $left; $this->right = $right;
}
}
function render_tree(?Node $node): string {
if ($node === null) return "_";
if ($node->left === null && $node->right === null) return (string)$node->value;
return $node->value . "(" . render_tree($node->left) . "," . render_tree($node->right) . ")";
}
function sample_tree(): Node {
return new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)));
}
function list_string(array $values): string { return "[" . implode(", ", $values) . "]"; }
function insert_node(?Node $root, int $value): Node { if ($root === null) return new Node($value); if ($value < $root->value) $root->left = insert_node($root->left, $value); else $root->right = insert_node($root->right, $value); return $root; }
$root = null;
foreach ([4, 2, 6, 1, 3, 5, 7] as $value) $root = insert_node($root, $value);
echo render_tree($root) . PHP_EOL;
?>
Complexity
- Time: O(h) per insert
- Space: O(n)
Implementation notes
- Nodes are PHP objects from
class Nodewith typed properties:int $value,?Node $left, and?Node $right. - The constructor defaults both child links to
null, so a new leaf starts with no children. $rootstarts asnull, then each value in[4, 2, 6, 1, 3, 5, 7]is inserted with$root = insert_node($root, $value).insert_node(?Node $root, int $value): Nodereturns a node every time; the empty-subtree case createsnew Node($value).- The comparison is
$value < $root->value; smaller values recurse into$root->left, while equal-or-larger values use the right branch. - Child attachment is recursive assignment:
$root->left = insert_node(...)or$root->right = insert_node(...). - The trace builds
4, then4(2,_),4(2,6),4(2(1,3),6(5,_)), and finally4(2(1,3),6(5,7)). render_treeprints_for anullchild andvalue(left,right)for an internal node, soecho render_tree($root) . PHP_EOLprints4(2(1,3),6(5,7)).- The replay also includes the sorted insert contrast
[1, 2, 3, 4], which produces1(_,2(_,3(_,4)))with height4and no rotation step.