BST Insert Operation in DSA Java - Time & Space Complexity
We want to understand how the time to insert a value in a Binary Search Tree (BST) changes as the tree grows.
How does the number of steps needed to insert depend on the tree size?
Analyze the time complexity of the following code snippet.
public class BST {
class Node {
int val;
Node left, right;
Node(int val) { this.val = val; }
}
Node root;
public Node insert(Node node, int val) {
if (node == null) return new Node(val);
if (val < node.val) node.left = insert(node.left, val);
else node.right = insert(node.right, val);
return node;
}
}
This code inserts a value into a BST by recursively finding the correct spot.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive calls moving down the tree nodes.
- How many times: Once per level from root to leaf where insertion happens.
Each insertion travels from the root down to a leaf position. The number of steps depends on the tree height.
| Input Size (n) | Approx. Operations (steps down tree) |
|---|---|
| 10 | About 3 to 10 steps depending on tree shape |
| 100 | About 7 to 100 steps depending on tree shape |
| 1000 | About 10 to 1000 steps depending on tree shape |
Pattern observation: In a balanced tree, steps grow slowly (logarithmic). In a skewed tree, steps grow linearly with n.
Time Complexity: O(h) where h is the tree height
This means the time depends on how tall the tree is, which can be small if balanced or large if skewed.
[X] Wrong: "Insertion always takes the same time regardless of tree shape."
[OK] Correct: The tree height changes with shape; a tall, unbalanced tree means more steps to insert.
Understanding how tree shape affects insertion time helps you explain trade-offs and shows you know why balanced trees matter.
"What if we used a self-balancing BST like AVL or Red-Black Tree? How would the time complexity change?"
Practice
insert operation in a Binary Search Tree (BST)?Solution
Step 1: Understand BST insert operation
The insert operation adds a new node to the BST without breaking the BST property where left child nodes are smaller and right child nodes are larger.Step 2: Identify the purpose
Insertion is specifically for adding new nodes, not deleting or balancing the tree.Final Answer:
To add a new node while maintaining BST properties -> Option AQuick Check:
Insert = Add node [OK]
- Confusing insert with delete operation
- Thinking insert balances the tree automatically
- Assuming insert finds max value
Solution
Step 1: Analyze method parameters and return type
Insertion usually requires the root node and the value to insert. It returns the updated root node after insertion.Step 2: Match signature with common BST insert pattern
The method returns a Node and takes Node root and int value as parameters, matching public Node insert(Node root, int value).Final Answer:
public Node insert(Node root, int value) -> Option DQuick Check:
Insert method returns Node with root and value [OK]
- Using void return type instead of Node
- Swapping parameter order incorrectly
- Returning int instead of Node
Solution
Step 1: Insert 15 into BST
Start at root 10: 15 > 10, go right to 20. 15 < 20, insert as left child of 20.Step 2: Perform inorder traversal
Inorder visits left, root, right: left subtree [5], root 10, left child of 20 is 15, then 20. Result: [5, 10, 15, 20]Final Answer:
[5, 10, 15, 20] -> Option CQuick Check:
Inorder after insert = sorted list [OK]
- Inserting 15 as right child of 10 incorrectly
- Confusing preorder with inorder traversal
- Ignoring BST property during insertion
public Node insert(Node root, int val) {
if (root == null) {
root = new Node(val);
} else if (val < root.val) {
insert(root.left, val);
} else {
insert(root.right, val);
}
return root;
}Solution
Step 1: Check recursive calls
Recursive calls to insert(root.left, val) and insert(root.right, val) do not assign the returned Node back to root.left or root.right.Step 2: Identify fix
Must assign: root.left = insert(root.left, val); and root.right = insert(root.right, val); to update tree links.Final Answer:
Missing return when recursively inserting left or right -> Option BQuick Check:
Assign recursive insert result to child [OK]
- Not assigning recursive insert result to left/right child
- Confusing base case logic
- Returning wrong type
Solution
Step 1: Insert 22 into BST
Start at root 30: 22 < 30 go left to 20; 22 > 20 go right to 25; 22 < 25 insert as left child of 25.Step 2: Perform inorder traversal
Inorder visits nodes in sorted order: 10, 20, 22, 25, 30, 35, 40, 50.Final Answer:
[10, 20, 22, 25, 30, 35, 40, 50] -> Option AQuick Check:
Inorder traversal is sorted list including 22 [OK]
- Inserting 22 in wrong subtree
- Misordering nodes in traversal
- Confusing preorder with inorder
Ready to prove it?
Pass the test and this pattern moves unknown
