# 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
# 思路分析:
比如说 我给出一个 对称的二叉树如下图所示:
那么怎么判断它到底是不是对称的呢?
首先根节点不用检查,我们让 根节点的 左右两个孩子去做比较,看看它俩的值是否一样,它俩值相等就表示至少从这两个节点开始它是对称的
然后接着往下走,此时需要注意:
左边 2 节点的 左孩子 跟 右边 2 节点的 右孩子 进行对比,两个边上的对比一下
然后 左边 2 节点的 右孩子 跟 右边 2 节点 的 左孩子 进行对比
接着往下比较也是类似的 比如说 比较到 3 节点了
也是 左边 3 节点 的 左孩子 跟 右边 3 节点的 右孩子 进行比较
左边 3 节点的 右孩子 跟 右边 3 节点的 左孩子 进行比较
# 代码实现:
class Solution { | |
public boolean isSymmetric(TreeNode root) { | |
//root 节点不用做比较 去比较 root 的 left 和 right 节点 | |
return check(root.left, root.right); | |
} | |
private boolean check(TreeNode left, TreeNode right) { | |
// 如果 两边都是 null 说明也是一样的 | |
if(left == null && right == null) | |
return true; | |
//left 和 right 不能同时为 null ,其中一个为 null 说明不对称 | |
if(right == null || left == null) | |
return false; | |
// 如果 左边的 值 和 右边的值不一样 说明不对称 | |
if(left.val != right.val) | |
return false; | |
// 1:判断 两边是否一样。2:判断内部两个是否一样 | |
return check(left.left, right.right) && check(left.right, right.left); | |
} | |
} |