101. Symmetric Tree

题目描述

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

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

说明:

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

我的解法——递归(AC)

  • 通过观察可以发现,只要左子树与右子树镜面对称即可,左子树的左孩子与右子树的右孩子配对,左子树的右孩子与右子树的左孩子配对,因而可以递归求解 也可以迭代求解。
  • 时间时间复杂度均为O(n),空间复杂度为O(1)。
  • Beat30%
# 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 myisSymmetric(self, left, right):
        if(left == None and right == None):
            return True
        elif(left == None or right == None):
            return False
        else:
            if(left.val == right.val and self.myisSymmetric(left.left,right.right) and self.myisSymmetric(left.right,right.left)):
                return True
            else:
                return False

    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if(root == None):
            return True
        else:
            return self.myisSymmetric(root.left,root.right)
    

其他解法——迭代

  • 借助两个队列,一个代表左子树,一个代表右子树,队列中节点以此对应。
  • 算法时间复杂度O(n),空间复杂度O(n),时间比递归慢

参考答案

  • https://leetcode.com/problems/symmetric-tree/solution/