题目:
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 static boolean isSymmetric(TreeNode root) {
if(root==null)
return true;
Queue<TreeNode> left=new LinkedList<>();
Queue<TreeNode> right=new LinkedList<>();
if(root.left==null)
left.offer(root.left);
if(root.right==null)
right.offer(root.right);
while(!left.isEmpty()&&!right.isEmpty())
{
TreeNode l=left.poll();
TreeNode r=right.poll();
if(l==null&&r==null) continue;
if(l==null||r==null) return false;
if(l.val!=r.val) return false;
left.offer(l.left);left.offer(l.right);
right.offer(r.right);right.offer(r.left);//倒序插入 形成镜像
}
if(left.isEmpty()&&right.isEmpty())
return true;
else {
return false;
}
}
递归:
public boolean isSymmetric2(TreeNode root) {
if(root==null)
return true;
else {
return isSame(root.left, root.right);
}
}
public boolean isSame(TreeNode left,TreeNode right)
{
if(left==null&& right==null)
return true;
if(left==null||right==null)
return false;
if(left.val!=right.val)
return false;
else {
return isSame(left.left, right.right)&&isSame(left.right, right.left);
}
}