105. construct binary tree from preorder and inorder traversal

Medium

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

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

Note:
You may assume that duplicates do not exist in the tree.

For example, given

1
2
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]

Return the following binary tree:

1
2
3
4
5
  3
/
9 20
/
15 7

2019.9.3 独立做出来了

方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class (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])
node = TreeNode(preorder[0])
for i in range(len(inorder)):
if inorder[i]==preorder[0]:
break
node.left = self.buildTree(preorder[1:i+1], inorder[:i])
node.right = self.buildTree(preorder[i+1:], inorder[i+1:])
return node

类似题目:

Construct Binary Tree from Inorder and Postorder Traversal