4
# Definition for a binary tree node.5
# class TreeNode(object):6
# def __init__(self, val=0, left=None, right=None):10
class Solution(object):12
def buildTree(self, inorder, postorder):17
:type inorder: List[int]18
:type postorder: List[int]20
([-4,-10,3,-1], [7]) ((11,-8,2), [7])22
currentSplits = [(inorder, [], [])]25
for nodeVal in reversed(postorder):26
nodeDirectory[nodeVal] = TreeNode(nodeVal)27
for splits, nodes, directions in reversed(currentSplits):30
removing = (splits, nodes, directions)31
left = splits[: splits.index(nodeVal)]32
right = splits[splits.index(nodeVal) + 1 :]34
(left, nodes + [nodeVal], directions + ["left"])38
(left, nodes + [nodeVal], directions + ["left"])41
(right, nodes + [nodeVal], directions + ["right"])45
(right, nodes + [nodeVal], directions + ["right"])49
currentSplits.remove(removing)50
finalSplits = [splits for splits in finalSplits if splits[0]]53
nodeVal, nodes, directions = finalSplits.pop()54
bottomNode = nodeDirectory[nodeVal[0]] if nodeVal else None56
attachingNode = nodeDirectory[nodes.pop()]57
attachingDir = directions.pop()58
if attachingDir == "left":59
attachingNode.left = bottomNode61
attachingNode.right = bottomNode62
bottomNode = attachingNode63
return nodeDirectory[postorder[-1]]