题目描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
题意:
第一个实例,第二层左子树的左节点=右子树的右节点
第三层,左子树的节点的左面等于右子树节点的右面
左子树的节点的右边等于右子树节点的左边
这样属于镜像对称
有点像是一张纸,你把纸对折,这样对折了也是相等了对在一起
方法一:递归的方法
第一步:明确函数的参数和返回值类型
boolean dfs(TreeNode left,TreeNode right){
}
第二步:递归的结束条件,如果递归函数没有结束条件的话,会一直调用,然后会造成栈溢出。
结束条件有三种可能
①左子树为空并且右子树为空
②左子树或右子树为空
③左子树的节点不等于右子树的节点
第三步:单层递归的逻辑
也就是镜像对称的规律
左子树的右边=右子树的左边&&左子树的左边=右子树的右边
class Solution {
public boolean isSymmetric(TreeNode root) {
return dfs(root.left,root.right);
}
boolean dfs(TreeNode left,TreeNode right){
if(left == null && right == null) return true;//递归结束的条件,左子树和右子树为空返回true
if(left == null || right == null) return false;//左子树或右子树为空
return (left.val == right.val) && dfs(left.left,right.right) && dfs(left.right,right.left);
}
}