LC 101二叉树简单第 48 / 95 题

对称二叉树

Symmetric Tree

递归双指针式比较
本机进度仅保存在当前浏览器

题目描述

给你一个二叉树的根节点 root,检查它是否轴对称(镜像对称)。

示例:[1, 2, 2, 3, 4, 4, 3] 是对称的,返回 true。

解题思路

  1. 对称等价于:左子树与右子树互为镜像。把问题转化为比较两棵树。
  2. 两棵树互为镜像的条件:根值相等,且"左的左"与"右的右"互为镜像、"左的右"与"右的左"互为镜像。
  3. 递归比较两个节点即可;迭代版用队列成对入队,本质相同。

参考实现

查看参考实现Python · 建议先自行作答
def isSymmetric(root):
    def isMirror(a, b):
        # 双方都空对称,单方空不对称
        if not a and not b:
            return True
        if not a or not b or a.val != b.val:
            return False
        # 外侧对外侧,内侧对内侧
        return isMirror(a.left, b.right) and isMirror(a.right, b.left)

    return isMirror(root, root) if root else True

复杂度与归属

时间复杂度O(n)
空间复杂度O(h)
所属分类二叉树
题源LeetCode 101

关联教程

返回题图鉴