3 - Easy - 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [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

说明:

如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

递归

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def help(self, p, q):
        if p == None and q == None: return True
        if p and q and p.val == q.val:
            return self.help(p.right, q.left) and self.help(p.left, q.right)  # 重点,左的右=右的左,左的左=右的右
        return False
    
    def isSymmetric(self, root):
        if root:
            return self.help(root.left, root.right)
        return True

循环

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        row = [root]
        while row:
            ret = map(lambda x: x.val if x else x, row)
            if ret != list(reversed(ret)):
                return False
            row = filter(lambda x: x, row)
            row = [kid for item in row for kid in (item.left, item.right)]
        return True
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容