Again, this can be solved using many approaches both recursively or iteratively.
Approach 1: My recursive solution with complexity O(n) where n is the total number of TreeNodes in the tree is as follows:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null)
return true;
if (root.left == null && root.right == null)
return true;
return isMirror (root.left, root.right);
}
private boolean isMirror(TreeNode r1, TreeNode r2) {
if (r1 == null && r2 == null)
return true;
if ((r1 == null && r2 != null) || (r1 != null && r2 == null))
return false;
if (r1.val != r2.val)
return false;
boolean mirror = isMirror(r1.left, r2.right);
if (mirror)
mirror = isMirror(r1.right, r2.left);
return mirror;
}
}
Approach 2: An iterative solution approach making use of a BFS like queue insertion of node-pairs to check for equality when popped (again O(n)):
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null)
return true;
if (root.left == null && root.right == null)
return true;
//iterative solution
Queue<TreeNode> q = new LinkedList<>();
q.add(root.left);
q.add(root.right);
while(!q.isEmpty()) {
TreeNode n1 = q.remove();
TreeNode n2 = q.remove();
if (n1 == null && n2 == null)
continue;
if ((n1 == null && n2 != null) || (n1 != null && n2 == null))
return false;
if (n1.val != n2.val)
return false;
q.add(n1.left);
q.add(n2.right);
q.add(n1.right);
q.add(n2.left);
}
return true;
}
}
That's not all! There are definitely more approaches to it. One which I can think of is using stacks. Feel free to share your solutions for the same.
As always, you can checkout my latest accepted solutions on leetcode at https://leetcode.com/chandniverma/ . All the best!

