Symmetric Tree

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值