您的位置:首页 > 其它

Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal

2016-07-05 00:36 501 查看

题目大意

给出二叉树的前序与中序遍历,返回该二叉树

算法

很简单,递归的去做

前序第一个点为当前子树的根节点,在中序中寻找该节点,以此节点进行划分,左边为根节点左子树中序,右边为根节点的右子树中序。

前序的划分利用中序划分的结果,左子树前序等于list[1 … 1+len(左子树中序)]

,右子树中序等于list[1+len(左子树中序) … 最后]

代码

You are here!

Your runtime beats 95.32% of pythonsubmissions

class Solution(object):
def addTree(self, preorder_start,preorder_end,inorder_start,inorder_end):
if preorder_end <= preorder_start or inorder_end <= inorder_start:
return None

head_num = self.preorder[preorder_start]
head = TreeNode(head_num)
head_index = self.dict[head_num]

length = head_index - inorder_start + 1

head.left = self.addTree(preorder_start+1,preorder_start + length,inorder_start,head_index)
head.right = self.addTree(preorder_start + length,preorder_end,head_index+1,inorder_end)

return head

def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if len(preorder) == 0:
return None

self.preorder = preorder
self.inorder = inorder
self.dict = {}

i = 0
for ele in inorder:
self.dict[ele] = i
i += 1
length = len(preorder)
return self.addTree(0,length,0,length)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: