class Solution(object):
def constructTree(self, preorder, inorder, indMap, preind0, preind1, inind0, inind1):
if preind0>=preind1:
return None
node=TreeNode(preorder[preind0])
pos=indMap[preorder[preind0]]
node.left=self.constructTree(preorder, inorder, indMap, preind0+1, pos-inind0+preind0+1, inind0, pos)
node.right=self.constructTree(preorder, inorder, indMap, pos-inind0+preind0+1, preind1, pos+1, inind1)
return node
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if len(preorder)<=0:
return None
indMap={}
for i,v in enumerate(inorder):
indMap[v]=i
head=TreeNode(preorder[0])
pos=indMap[preorder[0]]
head.left=self.constructTree(preorder, inorder, indMap, 1, pos+1, 0, pos)
head.right=self.constructTree(preorder, inorder, indMap, pos+1, len(preorder), pos+1, len(preorder))
return head