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