(python刷题)leetcode 第101题:对称二叉树

题目描述:
(python刷题)leetcode 第101题:对称二叉树_第1张图片

解题思路:
使用递归方法解题。
首先我们来看一颗数镜像对称的条件是什么?一棵树要镜像对称,只需要它的左右两颗子树镜像对称即可,如下图所示。(python刷题)leetcode 第101题:对称二叉树_第2张图片
而要判断左右子树是否是镜像对称,其实就是要判断两颗树是否镜像对称。如下图所示,两颗树镜像对称需要满足以下条件:
(1)它们的根节点相同
(2)树1的左子树和树2的右子树镜像对称
(3)树1的右子树和树2的左子树镜像对称
这就转化到了递归问题,具体的实现思路见下面的代码。
(python刷题)leetcode 第101题:对称二叉树_第3张图片
复杂度分析:
由于需要遍历一次树,所以时间复杂度为o(n)
递归的调用是需要进行栈的操作的,耗费空间,空间复杂度为o(n)

python代码:

# 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
        """
        if root is None:
            return True
        return self.isMirror(root.left, root.right)
        
    def isMirror(self, root1, root2):
        if root1 is None and root2 is None:
            return True
        if root1 is None or root2 is None:
            return False
        return root1.val == root2.val and\
               self.isMirror(root1.left, root2.right) and\
               self.isMirror(root1.right, root2.left)

参考资料:
https://leetcode-cn.com/problems/symmetric-tree/solution/dui-cheng-er-cha-shu-by-leetcode/

你可能感兴趣的:(刷题)