前序确定根节点值,带入中序,找到中序中根节点位置。
根据根节点位置将前序和中序都分为左右子序列,化成原问题两个子问题,然后递归求解。
class Solution: def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode: # 终止条件,之后没有节点了 if not vin: return None idx = vin.index(pre[0]) lvin= vin[:idx] # 左子树中序,越界返回空 rvin = vin[idx+1:] # 右子树中序,越界返回空 lpre = pre[1:idx+1] # 左子树前序,越界返回空 rpre = pre[idx+1:] # 右子树前序,越界返回空 print(lvin, rvin, lpre, rpre) # 递归建树 head = TreeNode(pre[0]) left = self.reConstructBinaryTree(lpre, lvin) head.left = left right = self.reConstructBinaryTree(rpre, rvin) head.right = right return head