Trees
BST Insert
Insert values into a binary search tree by comparing at each node.
Algorithm
Basic Implementation
basic.cpp
#include <iostream>
#include <queue>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
struct Node { int value; Node* left; Node* right; Node(int v, Node* l=nullptr, Node* r=nullptr): value(v), left(l), right(r) {} };
string render(Node* node) {
if (node == nullptr) return "_";
if (node->left == nullptr && node->right == nullptr) return to_string(node->value);
return to_string(node->value) + "(" + render(node->left) + "," + render(node->right) + ")";
}
Node* sampleTree() {
return new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)));
}
string listString(const vector<int>& values) {
stringstream out; out << "[";
for (size_t i = 0; i < values.size(); i++) { if (i) out << ", "; out << values[i]; }
out << "]"; return out.str();
}
Node* insert(Node* root, int value) { if (!root) return new Node(value); if (value < root->value) root->left = insert(root->left, value); else root->right = insert(root->right, value); return root; }
int main() { Node* root = nullptr; for (int value : {4, 2, 6, 1, 3, 5, 7}) root = insert(root, value); cout << render(root) << "\n"; }
Complexity
- Time: O(h) per insert
- Space: O(n)
Implementation notes
- In C++, each node is a
struct Nodewithint valueplus rawNode* leftandNode* rightchild links defaulting tonullptr. insert(Node* root, int value)returns the subtree root. A null subtree allocates withnew Node(value); otherwise recursion rewritesroot->leftorroot->rightwith the returned child pointer.- The branch condition is
value < root->value; equal values would take theelsepath to the right, though the checked trace inserts distinct values. - The executable builds from
root = nullptrusing values{4, 2, 6, 1, 3, 5, 7}. The trace shows paths such as4 -> left -> 2 -> rightbefore the tree reaches4(2(1,3),6(5,7)). render(Node*)recursively formats null children as_and prints the final tree withstd::cout << render(root) << "\n".- Visible allocation is one heap-allocated
Nodeper inserted value. The source uses raw pointers, not smart pointers, and does not show a matchingdeletecleanup path. - The replay also includes the sorted insert contrast
1(_,2(_,3(_,4))), showing the unbalanced raw-link shape and height4.
binary search tree
Values smaller than a node go left; larger values go right.