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 Java 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

BST insertion is a comparison path. The pinned tree 4(2(1,3),6(5,7)) is shown with the inserted value taking its sorted slot.

Step 1 - Start at root

For value 5, compare with 4 first; 5 is larger, so move right.

First comparison: 5 > 4, so the search for the insert slot goes right.insert 54compare26137

Step 2 - Take the left slot under 6

At 6, value 5 is smaller, so it becomes the left child.

Second comparison: 5 < 6, so the open left slot is used.426compare135new7

Step 3 - Canonical tree

The resulting tree is the pinned shape 4(2(1,3),6(5,7)).

Final BST after 5 is present under 6.4261357

Basic Implementation

Basic.java
import java.util.*;

public class Basic {
    static class Node {
        int value;
        Node left;
        Node right;
        Node(int value) { this.value = value; }
        Node(int value, Node left, Node right) { this.value = value; this.left = left; this.right = right; }
    }
    static String render(Node node) {
        if (node == null) return "_";
        if (node.left == null && node.right == null) return Integer.toString(node.value);
        return node.value + "(" + render(node.left) + "," + render(node.right) + ")";
    }
    static Node sampleTree() {
        return new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)));
    }
    static Node insert(Node root, int 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; }
    public static void main(String[] args) { Node root = null; for (int value : new int[] {4, 2, 6, 1, 3, 5, 7}) root = insert(root, value); System.out.println(render(root)); }
}

Complexity

  • Time: O(h) per insert
  • Space: O(n)

Implementation notes

  • Java represents each tree node as a Node object with primitive int value plus Node left and Node right reference fields. Missing children are null.
  • main starts with Node root = null and reassigns root = insert(root, value) for each value, so the first root == null case can return the new root object.
  • insert is recursive: a null subtree allocates new Node(value); value < root.value assigns root.left = insert(root.left, value); otherwise root.right = insert(root.right, value). Equal values would follow the right branch because there is no separate duplicate case.
  • The replay exposes each comparison path and rendered tree state, ending with 4(2(1,3),6(5,7)); it also keeps the sorted-insert contrast 1(_,2(_,3(_,4))) to show the unbalanced O(n) path. Allocated nodes are ordinary JVM heap objects managed by GC.