题目描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
思路分析
下图是一棵对称二叉树,它以图中的虚线镜像对称。
抛去它的根节点 1,如何判断以 2 为根节点的两棵子树是镜像对称的呢?
① 比较左右两棵子树的根节点的值是否相等 2 == 2。
② 比较左子树的左节点是否等于右子树的右节点 3 == 3。
③ 比较左子树的右节点是否等于右子树的左节点 4 == 4。
显然,我们可以使用递归实现。
递归何时结束?
① 两个根节点中至少有一个为空时。
② 两个根节点的值不等时。
代码描述
使用 Java 进行代码描述:
class Solution {
public boolean isSymmetric(TreeNode root) {
return isSymmetric(root, root);
}
public boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null) return true;
if (left == null || right == null) return false;
if (left.val != right.val) return false;
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
}