# 105 Construct Binary Tree from Preorder and Inorder Traversal

Original Description
Given preorder and inorder traversal of a tree, construct the binary tree.

• 要求： 给inorder, preorder traversal 的数组，返回对应的树

• 返回：
对应的树

• 例子：
• input: preorder = [3,9,20,15,7]， inorder = [9,3,15,20,7]
• output:
。 3 。 /
。 9 20 。。 /
。。15 7

## Solution

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if len(preorder) == 0:
return None
if len(preorder) == 1:
return TreeNode(preorder[0])

# recursively use root in preorder to separate inorder into left and right subtree
root = TreeNode(preorder[0])
root_idx = inorder.index(root.val)
root.left = self.buildTree(preorder[1 : root_idx + 1], inorder[0 : root_idx])
root.right = self.buildTree(preorder[root_idx + 1 :], inorder[root_idx + 1 :])
return root