请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:复制一颗二叉树,在该二叉树的基础上求得二叉树的镜像,同时遍历两颗二叉树,判断每一个节点是否相同。
public class Solution {
boolean b=true;
TreeNode root1;
TreeNode root2;
boolean isSymmetrical(TreeNode pRoot)
{
root1=pRoot;
root2=copy(pRoot);
root2=Mirror(root2);
isEqual(root1,root2);
return b;
}
private TreeNode copy(TreeNode root){
if(root!=null){
TreeNode t=new TreeNode(0);
t.val=root.val;
if(t==root1){
root2=t;
}
t.left=copy(root.left);
t.right=copy(root.right);
return t;
}
else{
return null;
}
}
private TreeNode Mirror(TreeNode root){
if(root!=null){
Mirror(root.left);
Mirror(root.right);
TreeNode t=root.left;
root.left=root.right;
root.right=t;
}
return root;
}
private void isEqual(TreeNode root1, TreeNode root2){
if((root1==null && root2!=null) || (root1!=null && root2==null)){
b=false;
return;
}
if(root1!=null && root2!=null){
if(root1.val!=root2.val){
b=false;
return;
}
isEqual(root1.left, root2.left);
isEqual(root1.right, root2.right);
}
}
}