def buildTree(inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
def helper(inorder, postorder):
if len(inorder) < 1 :
return None
current_node = postorder.pop(-1) # take current node as last element of postorder traversal (postorder is pass by reference and hence pop in one call will impact other calls)
current_node_idx = inorder.index(current_node) # take the index to split inorder values for left and right subtrees
# With postorder traversal first call right subtree and then left subtree
right_subtree = helper(inorder[ccurrent_node_idx+1:], postorder)
left_subtree = helper(inorder[:ccurrent_node_idx], postorder)
return(TreeNode(current_node, left_subtree, right_subtree))
return(helper(inorder, postorder))