[LeetCode] 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
题目的意识是判断二叉树是否是镜像的,网上很多方法都是用递归或者层层遍历的,我觉得我们可以根据先序 + 中序 + 后序来判断,最直观来讲,如果一棵树是镜像二叉树,那么他的先序遍历和后续遍历正好相反,并且它的中序遍历序列也是关于中点元素对称的,另外,如果一个二叉树是镜像树,那么它的接点一定为奇数(空树除外)。基于这样判断,代码如下:

class TreeNode:
	def __init__(self, x):
		self.val = x
		self.left = None
		self.right = None

class Solution:
	# @param root, a tree node
	# @param sum, an integer
	# @return a boolean
	
	def scanTree(self, root, pre, mid, aft):
		if None == root:
			return 0
			
		pre.append(root.val)
		self.scanTree(root.left, pre, mid, aft)
		mid.append(root.val)
		self.scanTree(root.right, pre, mid, aft)
		aft.append(root.val)
		
	def isSymmetric(self, root):
		if None == root:
			return True
		pre = []
		aft = []
		mid = []
		self.scanTree(root, pre, mid, aft)
		liLen = len(aft)
		if liLen % 2 == 0:
			return False
		for i in xrange(liLen):
			if pre[i] != aft[liLen - i - 1]:
				return False
		for i in xrange(liLen / 2):
			if mid[i] != mid[liLen -i - 1]:
				return False
		return True




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值