题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
思路
如果一个树的左子树与右子树镜像对称,那么这个树是对称的。
因此,该问题可以转化为:两个树在什么情况下互为镜像?
如果同时满足下面的条件,两个树互为镜像:
- 它们的两个根结点具有相同的值。
- 每个树的右子树都与另一个树的左子树镜像对称。
实现
boolean isSymmetrical(TreeNode pRoot) {
if(pRoot==null) return true;
return isMirror(pRoot.left,pRoot.right);
}
public boolean isMirror(TreeNode root1,TreeNode root2){
if(root1==null&&root2==null) return true;
if(root1==null||root2==null) return false;
if(root1.val!=root2.val) return false;
return isMirror(root1.left,root2.right)&&isMirror(root1.right,root2.left);
}
收获
画图使抽象问题形象化