【效率百分百】剑指 Offer 28. 对称的二叉树——递归解法!!!

原题链接

题目描述

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

1
/ \
2 2
\ \
3 3

示例 1

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2

输入:root = [1,2,2,null,3,null,3]
输出:false

限制

0 <= 节点个数 <= 1000


解法

思路

子树对称有两种情况

  1. 左右结点相等
  2. 左子树的左结点和右子树的右结点相等,左子树的右结点和右子树的左结点相等

代码

public boolean isSymmetric(TreeNode root) {
    // 空树符合对称条件
    return root == null ? true : isSym(root.left, root.right);
}

/* 判断两子树是否对称 */
private boolean isSym(TreeNode left, TreeNode right) {
    // 都为空则对称
    if(left == null && right == null) return true;
    // 有一个为空或者两子树的值不相等,不对称
    if(left == null || right == null || left.val != right.val) return false;
    // 再递归判断
    return isSym(left.left, right.right) && isSym(left.right, right.left);
}

提交结果

【效率百分百】剑指 Offer 28. 对称的二叉树——递归解法!!!_第1张图片

你可能感兴趣的:(剑指offer,数据结构,二叉树,数据结构,leetcode)