给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如: 下面这棵二叉树是对称的
思路:有一个函数可以判断r1,r2两个节点的是否相同,镜像相当于判断
r1的左子树==r2右子树
r1的右子树==r2左子树
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean isSymmetrical(TreeNode pRoot) {
if(pRoot==null) return true;
if(isSame(pRoot.left,pRoot.right)) return true;
return false;
}
public boolean isSame(TreeNode r1,TreeNode r2){
//如果一边有数字一边为空则返回false
if(r1==null && r2!=null) return false;
if(r2==null && r1!=null) return false;
//一直遍历到两个节点都为空就说明是镜像的
if(r1==null && r2==null) return true;
//只有节点值相等才能继续向下遍历
if(r1.val==r2.val)
return isSame(r1.left,r2.right) && isSame(r1.right,r2.left);
else
return false;
}
}