101. 对称二叉树
题目
给定一个二叉树,检查它是否是镜像对称的。1
2
3
4
5
6
7
8
9
10
11
12
13
14例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
方法
如果一个树的左子树与右子树镜像对称,那么这个树是对称的。
因此,该问题可以转化为:两个树在什么情况下互为镜像?
如果同时满足下面的条件,两个树互为镜像:
- 它们的两个根结点具有相同的值。
- 每个树的右子树都与另一个树的左子树镜像对称。
方法1:递归遍历
1 | # Definition for a binary tree node. |
方法2:迭代遍历
先序遍历1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# 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 not root:
return True
stack=[[root.left,root.right]]
while stack:
left,right=stack.pop()
if not left and not right:
continue
# process
if not left or not right or left.val!=right.val:
return False
# 只有当left.val==right.val才执行append
if left.left or right.right:
stack.append([left.left,right.right])
if left.right or right.left:
stack.append([left.right,right.left])
return True