树的遍历 | 对称二叉树
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
思路1: 递归
如果两个树p,q是对称的,那么p的左子树和q的右子树是对称的,p的右子树和左子树是对称的,
class Solution(object):
def isSymmetric(self, root):
return self.Mirror(root,root)
def Mirror(self,p,q):
if p is None and q is None:
return True
elif p is not None and q is not None:
return p.val == q.val and self.Mirror(p.left,q.right) and self.Mirror(p.right,q.left)
else:
return False
思路2: 遍历
如果两个树p,q是对称的,那么在遍历的过程中,分别按照左孩子优先和右孩子优先遍历的顺序进行遍历,得到最终的结果是一样的。