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
Note:
Bonus points if you could solve it both recursively and iteratively.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
return isSymmetric(root, root);
}
public boolean isSymmetric(TreeNode root1, TreeNode root2){
if(root1 == null && root2 == null)
return true;
if(root1 != null && root2 != null)
if(root1.val == root2.val)
return isSymmetric(root1.left, root2.right) && isSymmetric(root1.right, root2.left);
return false;
}
}
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root){
// Start typing your Java solution below
// DO NOT write main() function
if(root == null)
return true;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
Stack<TreeNode> stack = new Stack<TreeNode>();
Stack<TreeNode> traverse = new Stack<TreeNode>();
TreeNode p = root;
do{
if(p != null){
traverse.push(p);
p = p.left;
}
else{
p = traverse.pop();
queue.offer(p);
stack.push(p);
p = p.right;
}
}while(!traverse.isEmpty() || p != null);
while(!queue.isEmpty() && !stack.isEmpty()){
TreeNode first = queue.poll();
TreeNode last = stack.pop();
if(first.val != last.val)
return false;
}
if(queue.isEmpty() && stack.isEmpty())
return true;
else
return false;
}
}