105. Construct Binary Tree from Preorder and Inorder Traversal (Medium) - TengnanYao/daily_leetcode GitHub Wiki
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
# recursion
if inorder:
root = TreeNode(preorder[0])
i = inorder.index(preorder.pop(0))
root.left = self.buildTree(preorder, inorder[ : i])
root.right = self.buildTree(preorder, inorder[i + 1 : ])
return root
# # iteration
# h = {}
# for i, num in enumerate(inorder):
# h[num] = i
# root = cur = TreeNode(preorder[0])
# for i, num in enumerate(preorder[1 : ]):
# while True:
# if h[cur.val] > h[num]:
# if cur.left:
# cur = cur.left
# else:
# cur.left = TreeNode(num)
# cur = root
# break
# elif h[cur.val] < h[num]:
# if cur.right:
# cur = cur.right
# else:
# cur.right = TreeNode(num)
# cur = root
# break
# return root