剑指 Offer 28. 对称的二叉树

154 阅读1分钟

题目描述

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [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

解题思路: 递归法

通过递归, 判断传入的左右节点是否同时为空, 如果为空, 说明当前递归是对称的. 如果不为空并且左右节点的val相同, 就递归判断 (l.left, r.right) 和 (l.right, r.left) 是否符合条件

示例代码

def isSymmetric(self, root: TreeNode) -> bool:
    def check(l, r):
        if not l and not r:
            return True
        if l and r and l.val == r.val:
            return check(l.left, r.right) and check(l.right, r.left)
        return False

    if not root:
        return True

    return check(root, root)