101. Symmetric Tree

来源:互联网 发布:双11是天猫还是淘宝 编辑:程序博客网 时间:2024/06/06 16:46

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

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

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

But the following [1,2,2,null,3,null,3] is not:

    1   / \  2   2   \   \   3    3

Note:

Bonus points if you could solve it both recursively and iteratively.


public class Solution {    public boolean isSymmetric(TreeNode root) {        if(root == null){            return true;        }        return isSymmetric(root.left, root.right);    }        public boolean isSymmetric(TreeNode left, TreeNode right){        if(left == null && right == null){            return true;        }        if(left == null || right == null){            return false;        }        return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);    }}

public boolean isSymmetric(TreeNode root) {    if(root == null)        return true;    if(root.left == null && root.right == null)        return true;    if(root.left == null || root.right == null)        return false;    LinkedList<TreeNode> q1 = new LinkedList<TreeNode>();    LinkedList<TreeNode> q2 = new LinkedList<TreeNode>();    q1.add(root.left);    q2.add(root.right);    while(!q1.isEmpty() && !q2.isEmpty()){        TreeNode n1 = q1.poll();        TreeNode n2 = q2.poll();                if(n1.val != n2.val)            return false;        if((n1.left == null && n2.right != null) || (n1.left != null && n2.right == null))            return false;        if((n1.right == null && n2.left != null) || (n1.right != null && n2.left == null))            return false;                if(n1.left != null && n2.right != null){            q1.add(n1.left);            q2.add(n2.right);        }                if(n1.right != null && n2.left != null){            q1.add(n1.right);            q2.add(n2.left);        }                }    return true;}