1.题目描述
2.思路和知识点
(1)根节点为空: 如果根节点为空,树是对称的。
(2)递归检查: isMirror 方法递归检查两个子树是否是镜像对称的。
(3)辅助函数 isMirror:
1)如果两个节点都为空,它们是镜像对称的(return true)。
2)如果只有一个节点为空,它们不是镜像对称的(return false)。
3)如果两个节点的值相等,递归检查 p 的左子树和 q 的右子树,以及 p 的右子树和 q 的左子树是否镜像对称。
3.代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null)
{
return true;//根节点为空,返回true;
}
return isMirror(root.left,root.right);//递归调用左右子树
}
private boolean isMirror(TreeNode p,TreeNode q)
{
if(p==null&&q==null)//要先检查两个节点是否为空
{
return true;
}
if(p==null||q==null)//再单独检查某个节点是不是为空
{
return false;
}
return (p.val==q.val)&&isMirror(p.left,q.right)&&isMirror(p.right,q.left);
}
}