首页 > 其他 > 详细

【剑指offer】Q6:重建二叉树

时间:2014-07-06 00:33:38      阅读:379      评论:0      收藏:0      [点我收藏+]
class BTNode:

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


'''
@ construct tree by inorder & preorder

'''
def constructByInPre(inorder, instart, inend, preorder, prestart, preend):
	if inend < instart or preend < prestart:
		return None
	if len(preorder) != len( inorder ) :
		return None
	# preorder visit: root, left, right
	for i in range(instart, inend + 1):
		if inorder[i] == preorder[prestart]: break
	if i > inend:
		print "wrong data"
		return None
	root = BTNode(inorder[i])
	root.left = constructByInPre(inorder, instart, i - 1, preorder, prestart + 1, preend)
	root.right = constructByInPre(inorder, i + 1, inend, preorder, prestart + 2, preend)
	return root



'''
@ construct tree by inorder & postorder

'''
def constructByInPost(inorder, instart, inend, postorder, posstart, posend):
	if inend < instart or posend < posstart:
		return None
	if len(postorder) != len(inorder):
		return None
	# posterorder visit: left, right, root
	for i in range(instart, inend + 1):
		if inorder[i] == postorder[posend]: break
	if i > inend:
		print "wrong data"
		return None
	root = BTNode(inorder[i])
	leftlen = i - instart
	root.left = constructByInPost(inorder, instart, i - 1, postorder, posstart, posstart + leftlen - 1)
	root.right = constructByInPost(inorder, i + 1, inend, postorder, posstart + leftlen, posend - 1)
	return root

【剑指offer】Q6:重建二叉树,布布扣,bubuko.com

【剑指offer】Q6:重建二叉树

原文:http://blog.csdn.net/shiquxinkong/article/details/37081309

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!