根据一棵树的前序遍历与中序遍历构造二叉树。
ps:
你可以假设树中没有重复的元素。
一刷:
递归,比较简明的思路,找到中序中的根节点,划分左右子树就可以了。
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if preorder == [] or inorder == []:
return None
for i in range(len(preorder)):
for j in range(len(inorder)):
# 找到中序中的根节点,以此划分左右子树
if inorder[j] == preorder[i]:
tree = TreeNode(preorder[i])
tree.left = self.buildTree(preorder[i+1:len(preorder)], inorder[0:j])
tree.right = self.buildTree(preorder[i+1:len(preorder)], inorder[j+1:len(inorder)])
return tree