题目描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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/