Symmetric Binary Tree problem

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

But the following is not:

    1
   / \
  2   2
   \   \
   3    3

Symmetric Binary Tree solution in Java

The problem can be solved easily using recursion. Two binary trees T1 and T2 are symmetric if

  • the value of T1’s root node is same as the value of T2’s root node,
  • T1’s left subtree is symmetric with T2’s right subtree,
  • T1’s right subtree is symmetric with T2’s left subtree.

Here is the complete solution in Java:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val) { 
      this.val = val; 
    }
}

class SymmetricTree {
  private static boolean isSymmetric(TreeNode a, TreeNode b) {
    if(a == null && b == null) {
      return true;
    }
    if(a == null || b == null) {
      return false;
    }

    return a.val == b.val && 
    isSymmetric(a.left, b.right) && 
    isSymmetric(a.right, b.left);
  }

  private static boolean isSymmetric(TreeNode node) {
    if(node == null) {
      return true;
    }
    return isSymmetric(node.left, node.right);
  }

  public static void main(String[] args) {
    TreeNode node = new TreeNode(1);
    node.left = new TreeNode(2);
    node.right = new TreeNode(2);
    node.left.left = new TreeNode(3);
    node.left.right = new TreeNode(4);
    node.right.left = new TreeNode(4);
    node.right.right = new TreeNode(3);


    System.out.println(isSymmetric(node));
  }
}