题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
题目示例
输入:root = [1,2,2,3,4,4,3]
输出:true
解题思路
首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点!
对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。
比较的是两个子树的里侧和外侧的元素是否相等。
本题遍历只能是"后序遍历",因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。
参考代码
java
class Solution {
public boolean isSymmetric(TreeNode root) {
// 采用后序遍历,因为左右孩子需要给上层返回信息
return compare(root.left, root.right);
}
public boolean compare(TreeNode left, TreeNode right) {
// 终止条件
if(left != null && right == null) return false;
else if(left == null && right != null) return false;
// 到叶子结点
else if(left == null && right == null) return true;
else if(left.val != right.val) return false;
// 比较外侧
boolean outside = compare(left.left, right.right);
// 比较内侧
boolean inside = compare(left.right, right.left);
// 综合考虑内外侧
boolean result = outside && inside;
return result;
}
}