Skip to content

Instantly share code, notes, and snippets.

@RP-3
Created March 19, 2020 22:50
Show Gist options
  • Save RP-3/f5135c7fabe35cdbf641cc35bdba2634 to your computer and use it in GitHub Desktop.
Save RP-3/f5135c7fabe35cdbf641cc35bdba2634 to your computer and use it in GitHub Desktop.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# E.g.,
# [9, 15, 7, 20, 3] postorder
# [9, 3, 15, 20, 7] inorder
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
io = {value:index for index, value in enumerate(inorder)}
def tree(ioLeft: int, ioRight: int) -> TreeNode:
if ioLeft > ioRight: return None # no root available
root = postorder.pop()
rootNode = TreeNode(root)
rootPos = io[root]
rootNode.right = tree(rootPos+1, ioRight)
rootNode.left = tree(ioLeft, rootPos-1)
return rootNode
return tree(0, len(inorder)-1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment