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
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { 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; } }
?
原文:http://hcx2013.iteye.com/blog/2237449