题目要求:
思路:
思路1:伪代码
重构函数(前序遍历结果,中序遍历结果)
先判断前序遍历结果列表是否大于1:
根据前序遍历结果拿到当前树根节点TreeNode(pre[0])
将当前树分为左右子树,然后获取左右子树的前序遍历结果,中序遍历结果
当前根结点的左子节点 = 重构函数(左子树前序遍历结果,左子树中序遍历结果)
当前根结点的右子节点 = 重构函数(右子树前序遍历结果,右子树中序遍历结果)
再判断前序遍历结果列表是否等于1:
说明该根节点无左右子树,直接返回根节点即可
否则:
说明没有该二叉树直接返回 None
代码如下:
# 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:
if len(pre) > 1:
node = TreeNode(pre[0])
leftVArr = vin[0:vin.index(node.val)]
leftPArr,rightPArr = [],[]
for i in range(1, len(pre)):
if pre[i] in leftVArr:
leftPArr.append(pre[i])
else:
rightPArr.append(pre[i])
rightVArr = vin[vin.index(node.val) + 1:len(vin)]
node.left = self.reConstructBinaryTree(leftPArr, leftVArr)
node.right = self.reConstructBinaryTree(rightPArr, rightVArr)
return node
elif len(pre) == 1:
return TreeNode(pre[0])
else:
return None
# write code here