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