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
代码一:递归
public class Solution { public boolean isMirror(TreeNode left,TreeNode right) { if(left == null && right != null) return false; if(left != null && right == null) return false; if(left == null && right == null) return true; return left.val == right.val && isMirror(left.left, right.right) && isMirror(left.right, right.left); } public boolean isSymmetric(TreeNode root) { if(root == null) return true; else return isMirror(root.left, root.right); } }
代码二:迭代
public class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; List<TreeNode> item = new ArrayList<TreeNode>(); item.add(root); while(item.size() != 0) { List<TreeNode> tmp = new ArrayList<TreeNode>(); for(int i = 0, j = item.size() - 1; i <= j; i++, j--) { System.out.println(item.get(i).val + ":" + item.get(j).val); if(item.get(i).val != item.get(j).val) return false; if(item.get(i).left == null && item.get(j).right != null) return false; else if(item.get(i).left != null && item.get(j).right == null) return false; else if(item.get(i).left != null && item.get(j).right != null && item.get(i).left.val != item.get(j).right.val) return false; if(item.get(i).right == null && item.get(j).left != null) return false; else if(item.get(i).right != null && item.get(j).left == null) return false; else if(item.get(i).right != null && item.get(j).left != null && item.get(i).right.val != item.get(j).left.val) return false; } for(int i = 0; i < item.size(); i++) { if(item.get(i).left != null) tmp.add(item.get(i).left); if(item.get(i).right != null) tmp.add(item.get(i).right); } item = new ArrayList<TreeNode>(tmp); } return true; } }