剑指 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.当左右子树均不存在时,是对称的

3.递归调左右子树分别是否是对称的,当只有左右子树均对称的,这颗树才对称

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        def recur(L, R):
            if not L and not R:
                return True
            if (L and not R) or (R and not L):
                return False
            if L and R and L.val != R.val:
                return False
            return recur(L.left, R.right) and recur(L.right, R.left)
        return recur(root.left, root.right) if root else True

 或者这样

class Solution:
    def isSym(self, leftTree, rightTree):
            if not leftTree and not rightTree:
                return True
            elif (not leftTree and rightTree) or (not rightTree and leftTree):
                return False
            elif leftTree.val != rightTree.val:
                return False
            return self.isSym(leftTree.left, rightTree.right) & self.isSym(leftTree.right, rightTree.left)

    def isSymmetric(self, root: TreeNode) -> bool:
        if not root: 
            return True
        else:
            return self.isSym(root.left, root.right)
            

 

posted @ 2020-08-07 11:12  Yelush  阅读(126)  评论(0)    收藏  举报