Create a Binary Tree Manually in DSA Java - Time & Space Complexity
When we create a binary tree manually by adding nodes one by one, we want to understand how the time it takes grows as we add more nodes.
We ask: How does the work increase when the tree gets bigger?
Analyze the time complexity of the following code snippet.
class Node {
int value;
Node left, right;
Node(int val) { value = val; left = right = null; }
}
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
This code manually creates a binary tree by assigning nodes directly to left and right children.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating and linking nodes manually without loops or recursion.
- How many times: Each node is created and linked once, no repetition.
Since each node is created and linked one time, the work grows directly with the number of nodes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 node creations and links |
| 100 | 100 node creations and links |
| 1000 | 1000 node creations and links |
Pattern observation: The work increases in a straight line as the number of nodes increases.
Time Complexity: O(n)
This means the time to create the tree grows directly with the number of nodes you add.
[X] Wrong: "Creating a binary tree manually is constant time because we just write code once."
[OK] Correct: Even though the code is written once, each node creation and linking is a separate step that takes time, so the total time grows with the number of nodes.
Understanding how manual tree creation scales helps you reason about building trees in code and prepares you to analyze more complex tree operations.
"What if we used a loop or recursion to create the tree nodes instead of manual assignments? How would the time complexity change?"
Practice
Node class with an integer value?Solution
Step 1: Understand Node object creation
In Java, to create an object, you use thenewkeyword followed by the constructor call.Step 2: Apply correct syntax for constructor with value
The constructorNode(10)creates a node with value 10. Sonew Node(10)is correct.Final Answer:
Node root = new Node(10); -> Option DQuick Check:
Object creation with constructor = new Node(10) [OK]
- Omitting 'new' keyword
- Using incorrect constructor syntax
- Trying to assign value without constructor
Solution
Step 1: Understand node linking in binary tree
The left child of a node is usually accessed byleftfield. Assigning a new node requiresnew Node(value).Step 2: Apply correct field and constructor syntax
Soroot.left = new Node(5);correctly creates and links the left child.Final Answer:
root.left = new Node(5); -> Option AQuick Check:
Link left child with new Node = root.left = new Node(5) [OK]
- Using wrong field name like leftNode
- Omitting 'new' keyword
- Incorrect constructor call without 'new'
class Node {
int value;
Node left, right;
Node(int v) { value = v; }
}
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
void inorder(Node node) {
if (node == null) return;
inorder(node.left);
System.out.print(node.value + " ");
inorder(node.right);
}
inorder(root);Solution
Step 1: Understand inorder traversal order
Inorder visits left subtree, then root, then right subtree recursively.Step 2: Trace traversal on given tree
Left subtree of root(1) is node(2) with children 4 and 5.
Traverse left subtree of 2: 4 (no children)
Visit 2
Traverse right subtree of 2: 5 (no children)
Visit root 1
Traverse right subtree of root: 3 (no children)
Sequence: 4 2 5 1 3Final Answer:
4 2 5 1 3 -> Option AQuick Check:
Inorder = left, root, right = 4 2 5 1 3 [OK]
- Confusing preorder or postorder with inorder
- Missing left or right subtree nodes
- Printing root before left subtree
class Node {
int value;
Node left, right;
Node(int v) { value = v; }
}
Node root = new Node(10);
root.left = Node(5);
root.right = new Node(15);Solution
Step 1: Check node creation syntax
Creating a new node requires the 'new' keyword before constructor call.Step 2: Identify incorrect line
Lineroot.left = Node(5);misses 'new' keyword, causing syntax error.Final Answer:
Missing 'new' keyword when creating left child node -> Option CQuick Check:
Object creation needs 'new' keyword [OK]
- Omitting 'new' keyword
- Confusing constructor call with method call
- Assuming automatic object creation
Solution
Step 1: Create root and direct children
Root is 7, left child 3, right child 9, so assign accordingly.Step 2: Add left child's right child
Left child's right child is 5, soroot.left.right = new Node(5);is correct.Final Answer:
Node root = new Node(7); root.left = new Node(3); root.right = new Node(9); root.left.right = new Node(5); -> Option BQuick Check:
Assign children correctly by following tree structure [OK]
- Swapping left and right children
- Assigning child to wrong parent node
- Missing intermediate child nodes
Ready to prove it?
Pass the test and this pattern moves unknown
