Mirror a Binary Tree in DSA Java - Time & Space Complexity
We want to understand how the time needed to mirror a binary tree changes as the tree grows.
How does the work increase when the tree has more nodes?
Analyze the time complexity of the following code snippet.
public void mirrorTree(TreeNode root) {
if (root == null) return;
mirrorTree(root.left);
mirrorTree(root.right);
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
This code swaps the left and right children of every node in the tree, effectively mirroring it.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive calls visiting each node once.
- How many times: Once per node in the tree.
Each node is visited once to swap its children, so the work grows directly with the number of nodes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 swaps |
| 100 | About 100 swaps |
| 1000 | About 1000 swaps |
Pattern observation: The work grows linearly as the tree size increases.
Time Complexity: O(n)
This means the time to mirror the tree grows in direct proportion to the number of nodes.
[X] Wrong: "The time complexity is O(log n) because the tree height is log n."
[OK] Correct: Even though the tree height is about log n, every node must be visited once, so the total work depends on all nodes, not just the height.
Understanding this helps you explain how recursive tree algorithms scale, a common skill interviewers look for.
"What if we changed the code to only swap children at every other level? How would the time complexity change?"
Practice
Solution
Step 1: Understand the mirror operation
Mirroring a binary tree means swapping the left and right children of every node.Step 2: Apply the definition to the tree
By swapping children at every node, the tree becomes a mirror image of the original.Final Answer:
Swap the left and right children of every node in the tree -> Option BQuick Check:
Mirror = Swap children [OK]
- Thinking mirror means deleting nodes
- Confusing mirror with sorting
- Assuming mirror flattens the tree
Solution
Step 1: Identify correct return type
Mirroring modifies the tree in place, so void return type is appropriate.Step 2: Check method parameters
The method should accept the root node to start mirroring from.Final Answer:
public void mirrorTree(Node root) -> Option AQuick Check:
Void return + root parameter = correct signature [OK]
- Using return type int instead of void
- Missing root parameter
- Adding unnecessary exceptions
1
/ \
2 3
/ \
4 5
void mirrorTree(Node root) {
if (root == null) return;
Node temp = root.left;
root.left = root.right;
root.right = temp;
mirrorTree(root.left);
mirrorTree(root.right);
}
Solution
Step 1: Understand the mirror function
The function swaps left and right children at every node recursively.Step 2: Apply mirror to the tree
Original tree preorder: 1,2,4,3,5. After mirror, left and right children swap: - Root 1: left=3, right=2 - Node 3: left=5, right=null - Node 2: left=null, right=4Step 3: Preorder traversal after mirror
Visit root, then left subtree, then right subtree: 1, 3, 5, 2, 4Final Answer:
[1, 3, 5, 2, 4] -> Option AQuick Check:
Mirror swaps children; preorder = [1,3,5,2,4] [OK]
- Not swapping children correctly
- Confusing preorder with inorder
- Missing recursive calls
public void mirrorTree(Node root) {
Node temp = root.left;
root.left = root.right;
root.right = temp;
mirrorTree(root.left);
mirrorTree(root.right);
}Solution
Step 1: Identify cause of NullPointerException
The code accesses root.left without checking if root is null.Step 2: Fix by adding null check
Adding "if (root == null) return;" at the start prevents errors when root is null.Final Answer:
Missing null check before accessing root.left -> Option CQuick Check:
NullPointerException = missing null check [OK]
- Ignoring null checks
- Thinking swap order causes error
- Changing return type unnecessarily
Solution
Step 1: Understand mirroring effect on children
Mirroring swaps left and right children at every node.Step 2: Analyze nodes with one child
If a node has only a left child, after mirroring it will have only a right child (the left child moves to right).Step 3: Check other options
Tree height does not necessarily increase; leaf nodes remain leaves; nodes do not gain extra children.Final Answer:
Nodes with only left child will have only right child after mirroring -> Option DQuick Check:
Mirror swaps children, so left-only becomes right-only [OK]
- Assuming tree height changes
- Thinking nodes gain extra children
- Confusing leaf and internal nodes
Ready to prove it?
Pass the test and this pattern moves unknown
