Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
当看到这个题目的时候觉得非常简单,认为采用二叉树中序遍历就可以完成。遂开始写中序遍历的代码,写完提交。先是特殊情况没有考虑,然后是某个节点为空时没有考虑。不断的想方设法的在中序遍历上进行修改,企图投机取巧。但最终发现这个思路是有问题的,终于放弃。
其实当我在中序遍历的基础上进行修改时,我想了很多招,但是不能证明能满足所有的情况,这时我就应该放弃在这条路上探索了,因为无法证明无误,就一定会有例子出错。后来又想了一个思路,但觉得没有办法实现。网上一搜,看到第一行代码立马觉得我的思路就差一步,就差递归的思想了。
class Solution:
def isT(self, left, right):
if left == None and right == None:
return True
if left == None or right == None:
return False
return left.val == right.val and self.isT(left.left, right.right) and self.isT(left.right, right.left)
# @param root, a tree node
# @return a boolean
def isSymmetric(self, root):
if root == None:
return True
return self.isT(root.left, root.right)