# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param preOrder int整型一维数组 # @param vinOrder int整型一维数组 # @return TreeNode类 # """ https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/submissions/636827642/ """ class Solution: def reConstructBinaryTree(self , preOrder: List[int], vinOrder: List[int]) -> TreeNode: # write code here # 存储所有的中序遍历的节点 map=dict() for i in range(len(vinOrder)): map[vinOrder[i]]=i # 递归辅助函数 def buildhelp(preorder,preleft,preright,inorder,inleft,inright): if preleft>preright: return # 前序遍历的第一个节点就是根节点位置 preorder_root=preleft # 获取中序中根节点位置 inorder_root=map[preorder[preorder_root]] # 创建根节点 root= TreeNode(preorder[preorder_root]) #递归左子树 root.left=buildhelp(preorder,preleft+1,inorder_root-inleft+preleft,inorder ,inleft,inorder_root-1) root.right=buildhelp(preorder,inorder_root-inleft+preleft+1,preright,inorder,inorder_root+1,inright) return root root =buildhelp(preOrder,0,len(preOrder)-1,vinOrder,0,len(vinOrder)-1) return root