这一个题目需要重点学习,要复习递归的解决思想,常见的数据结构问题,在套路上,都是用递归的想法去解决他,因为这些数据结构,基本上都是一个双对称或者对称的递归结构

有待学习加强

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pre int整型一维数组 
# @param vin int整型一维数组 
# @return TreeNode类
#
class Solution:
    def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
        # write code here
        n, m = len(pre), len(vin) # 统计相应的长度
        if n==0 or m==0: # 两个长度都不能为0
            return None
        # 对根节点进行建立,使用递归的想法进行子树的构建
        root = TreeNode(pre[0])
        for i in range(len(pre)):
            if pre[0]==vin[i]:
                # 左边子树的前序
                left_pre_tree = pre[1:i+1] # 观察相应的图像,
                left_vim_tree = vin[:i] # 左子树的中序
                
                # 递归构建左边的子树
                root.left = self.reConstructBinaryTree(left_pre_tree, left_vim_tree)
                
                
                right_pre_tree = pre[i+1:] # 右子树的前序
                right_vim_tree = vin[i+1:] # 右子树的中序,自己不能算进去
                
                root.right = self.reConstructBinaryTree(right_pre_tree, right_vim_tree)
                # 构建完成退出循环就可
                break
        return root