题目分析:根据前序和中序遍历结果,生成二叉树,关键是找到中间的节点。
from collections import deque
class Solution:
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
def helper(preorder, inorder):
if not inorder:
return None
# pick up the first element as a root
root_val = preorder.popleft() # 取出最中间的元素
root = TreeNode(root_val)
# root splits inorder list
# into left and right subtrees
index = inorder.index(root_val)
# recursion
root.left = helper(preorder, inorder[:index])
root.right = helper(preorder, inorder[index + 1:])
return root
return helper(deque(preorder), inorder)