解题思路:
递归
1.确定递归的结束条件,当当前根节点不存在时返回
2.对前序遍历序列和中序遍历根据pre[0](当前树的根节点)进行拆分为左子树和右子树序列
3.进行递归生成左子树和右子树,最后返回头结点
class Solution:
def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
# write code here
#递归的方法,根据前序遍历确定根节点,在中序遍历序列中寻找根节点的位置,分为
#左右子树,继续递归
if len(pre) == 0:
return
#根节点以及左右子树的根节点每次都在pre的第一个位置
ele = pre[0]
#在中序遍历中找到该元素所在的位置
index = vin.index(ele)
#得到左子树的前序和中序遍历序列
left_pre = pre[1:index+1]
left_vin = vin[:index]
#得到右子树的前序和中序序列
right_pre = pre[index+1:]
right_vin = vin[index+1:]
#创建根节点
root = TreeNode(pre[0])
#创建左子树
root.left = self.reConstructBinaryTree(left_pre, left_vin)
#创建右子树
root.right = self.reConstructBinaryTree(right_pre, right_vin)
return root