Symmetric Tree
Easy
TreeDFSBFS
Problem
Given the root of a binary tree, decide whether it is a mirror image of itself (symmetric around its centre).
Example 1
Input: [1,2,2,3,4,4,3]
Output: true
Example 2
Input: [1,2,2,null,3,null,3]
Output: false
Constraints
- 1 ≤ nodes ≤ 1000
Approach — Tree Traversal
This is a Tree Traversal problem. The idea: traverse the tree — DFS recursively, or BFS level by level — and combine the results from each subtree. Work through the reference code below line by line, then re-derive it yourself in the editor — that's how the pattern sticks.
Complexity: O(n) time.
Solution code
Python
class Solution:
def isSymmetric(self, root):
def mirror(a, b):
if not a and not b:
return True
if not a or not b or a.val != b.val:
return False
return mirror(a.left, b.right) and mirror(a.right, b.left)
return mirror(root.left, root.right) if root else True
Java
class Solution {
public boolean isSymmetric(TreeNode root) {
return root == null || mirror(root.left, root.right);
}
private boolean mirror(TreeNode a, TreeNode b) {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
return a.val == b.val && mirror(a.left, b.right) && mirror(a.right, b.left);
}
}
Practice it
Reading a solution isn't the same as being able to write it under pressure. Open this problem in the in-browser editor, hide the solution, and solve it from scratch — your code runs against real test cases instantly.
Solve Symmetric Tree interactively → ← All solutions