难度:简单
频次:53
题目:
给你一个二叉树的根节点 root , 检查它是否轴对称。
解题思路:DFS递归
注意:
- 这里root不允许为空,树节点为1,1000之间
- 这里的DFS是返回boolean值,返回为boolean值的递归都是在return上面做的
- 而且每个DFS里都需要做两个递归
- 左节点的左节点和右节点的右节点----对称节点
- 左节点的右节点和右节点的左节点----对称节点
- 递归的结束条件有3个
- 左右节点都为null,对称
- 左右节点有1个为null,不对称
- 左右节点存在且不相等 不对称
- 其实还有一种情况:左右节点存在且相等,但是这种要继续递归。
代码
/**
* 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) {
//题目说了 root不为空
return DFS(root.left,root.right);
}
public boolean DFS(TreeNode left,TreeNode right){
//递归结束条件有3个
//第一个条件 左右子节点都为null,对称
if(left==null&&right==null) return true;
//第二个条件 当左右子节点只有一个为空的时候,就不对称了
if(left==null||right==null) return false;
//第三个条件 当左右子节点都存在,并且值不相等的时候,就不对称了
if(left.val!=right.val) return false;
//继续递归左节点的左节点和右节点的右节点
//左节点的右节点和右节点的左节点
return DFS(left.right,right.left)&&DFS(left.left,right.right);
}
}