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);}}