leetcode105 Construct Binary Tree from Preorder and Inorder Traversal

 1 """
 2 For example, given
 3 preorder = [3,9,20,15,7]
 4 inorder = [9,3,15,20,7]
 5 Return the following binary tree:
 6     3
 7    / 
 8   9  20
 9     /  
10    15   7
11 """
12 class TreeNode:
13     def __init__(self, x):
14         self.val = x
15         self.left = None
16         self.right = None
17 class Solution(object):
18     def buildTree(self, preorder, inorder):
19         if len(preorder) == 0:
20             return None
21         root_val = preorder[0]
22         root_index = inorder.index(root_val)
23         result = TreeNode(root_val)
24         left_preorder = preorder[1:root_index+1] #比如L=[5,3,6]
25         right_preorder = preorder[root_index+1:] #L[1:3] == [3,6]
26         left_inorder = inorder[:root_index]      #实际index是1,2
27         right_inorder = inorder[root_index+1:]
28         result.left = self.buildTree(left_preorder, left_inorder)  #递归
29         result.right = self.buildTree(right_preorder, right_inorder)
30         return result
31 """
32 常见的题,给出前序中序 求二叉树
33 leetcode106为给出中序后序 求二叉树,可相互比较
34 """
原文地址:https://www.cnblogs.com/yawenw/p/12253989.html