题目如下:
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
解决办法如下:
package test;
public class LC101Try1
{
public boolean isSymmetric(TreeNode root)
{
boolean ret = true;
if(root==null){
return ret;
}
ret=getPass(root.left,root.right);
return ret;
}
public boolean getPass(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;
}
return getPass(left.right,right.left)&&getPass(left.left,right.right);
}
}
class Solution {
public boolean isSymmetric(TreeNode root) {
boolean ret=false;
if(root==null){
return ret;
}
return isSame(root.left,root.right);
}
public boolean isSame(TreeNode p,TreeNode q){
if(p!=null && q!=null){
if(p.val!=q.val){
return false;
}else{
return isSame(p.left,q.right)&&isSame(p.right,q.left);
}
}else{
if(p==null && q==null){
return true;
}else{
return false;
}
}
}
}
接下来看下错误的解法:
class Solution {
public boolean isSymmetric(TreeNode root)
{
boolean ret = true;
if(root==null){
return ret;
}
if(root.left==null&&root.right==null){
return ret;
}
List<Integer> leftList=new ArrayList<Integer>();
List<Integer> rightList=new ArrayList<Integer>();
getPass(root.left,leftList);
getPass(root.right,rightList);
if(rightList.size()!=leftList.size()){
return false;
}
for(int i=0,j=rightList.size()-1;i<=j;i++,j--){
if(leftList.get(i)!=rightList.get(j)){
return false;
}
}
return ret;
}
public void getPass(TreeNode root,List<Integer> list){
if(root==null){
return;
}
getPass(root.left,list);
list.add(root.val);
getPass(root.right,list);
}
}
原因:
[1,2,3,3,null,2,null]这样的树,就出错了