Check if Two Trees are Symmetric in DSA Javascript - Time & Space Complexity
We want to know how the time needed to check if two trees are mirror images grows as the trees get bigger.
How does the number of steps change when the trees have more nodes?
Analyze the time complexity of the following code snippet.
function isMirror(t1, t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1.val === t2.val) &&
isMirror(t1.left, t2.right) &&
isMirror(t1.right, t2.left);
}
function isSymmetric(root) {
return isMirror(root, root);
}
This code checks if a tree is symmetric by comparing it to itself in a mirrored way.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive calls comparing pairs of nodes.
- How many times: Each node in the tree is visited once in the recursion.
As the tree grows, the function checks more pairs of nodes, roughly one pair per node.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 node comparisons |
| 100 | About 100 node comparisons |
| 1000 | About 1000 node comparisons |
Pattern observation: The number of steps grows roughly in direct proportion to the number of nodes.
Time Complexity: O(n)
This means the time to check symmetry grows linearly with the number of nodes in the tree.
[X] Wrong: "The function only checks half the nodes, so it runs in half the time."
[OK] Correct: Even though it compares pairs, every node is still visited once, so the time depends on all nodes.
Understanding how recursion explores all nodes helps you explain your solution clearly and confidently in interviews.
"What if we changed the code to check symmetry only on one subtree instead of both? How would the time complexity change?"
Practice
Solution
Step 1: Understand symmetry in trees
Two trees are symmetric if one is the mirror reflection of the other around the center.Step 2: Compare structure and node values
Both structure and node values must match in a mirrored way for symmetry.Final Answer:
They are mirror images of each other around their center. -> Option CQuick Check:
Symmetry means mirror image = C [OK]
- Thinking same number of nodes means symmetric
- Only comparing root values
- Ignoring structure differences
Solution
Step 1: Identify parameters needed
To check symmetry between two trees, we need two tree inputs.Step 2: Match function signature
Only the function with two parameters for two trees matches the requirement.Final Answer:
function isSymmetric(tree1, tree2) {} -> Option BQuick Check:
Two trees need two parameters = B [OK]
- Using only one tree parameter
- Adding unnecessary third parameter
- Wrong function naming
function isMirror(t1, t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1.val === t2.val) && isMirror(t1.left, t2.right) && isMirror(t1.right, t2.left);
}
const tree1 = { val: 1, left: { val: 2, left: null, right: null }, right: { val: 3, left: null, right: null } };
const tree2 = { val: 1, left: { val: 3, left: null, right: null }, right: { val: 2, left: null, right: null } };
console.log(isMirror(tree1, tree2));Solution
Step 1: Check base cases for null nodes
Both trees have matching null nodes at corresponding mirror positions, so base cases return true.Step 2: Compare node values and recursive calls
Root values match (1), left of tree1 (2) matches right of tree2 (2), right of tree1 (3) matches left of tree2 (3). All recursive calls return true.Final Answer:
true -> Option DQuick Check:
Mirror check returns true for symmetric trees [OK]
- Confusing left and right children in recursion
- Ignoring null node base cases
- Assuming order of children doesn't matter
function isMirror(t1, t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1.val === t2.val) && isMirror(t1.left, t2.left) && isMirror(t1.right, t2.right);
}Solution
Step 1: Analyze recursive calls for symmetry
The function compares t1.left with t2.left and t1.right with t2.right, which checks for identical trees, not mirror symmetry.Step 2: Correct recursive calls for mirror check
To check symmetry, t1.left should be compared with t2.right and t1.right with t2.left.Final Answer:
It compares left with left and right with right instead of mirror sides. -> Option AQuick Check:
Mirror check swaps sides in recursion = A [OK]
- Comparing same sides instead of mirror sides
- Missing null checks
- Using assignment (=) instead of equality (===)
Solution
Step 1: Understand iterative symmetry check
Using a queue, we can compare nodes from the left side of one tree with the right side of the other tree iteratively.Step 2: Why other methods fail
Preorder traversal compares nodes in the same order, not mirror order. Height check or root-only check ignores structure and values.Final Answer:
Use a queue to iteratively compare nodes from left of one tree and right of the other. -> Option AQuick Check:
Iterative mirror check uses queue swapping sides = D [OK]
- Using preorder traversal without mirroring
- Checking only height or root values
- Ignoring iterative approach benefits
Ready to prove it?
Pass the test and this pattern moves unknown
