这一个题目需要重点学习,要复习递归的解决思想,常见的数据结构问题,在套路上,都是用递归的想法去解决他,因为这些数据结构,基本上都是一个双对称或者对称的递归结构
有待学习加强
# 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