目录

三个月算法进阶--day49

目录

递归建树

leetcode剑指offer第7题重建二叉树

前序遍历用于确定根节点,中序遍历用于划分左右子树

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        self.preorder = preorder
        self.tmp = {inorder[i]: i for i in range(len(inorder)) }
        return self.recur(0, 0, len(inorder) - 1)
    
    def recur(self, preroot, left, right):
        if left > right:
            return
        index = self.tmp[self.preorder[preroot]]
        root = TreeNode(self.preorder[preroot])
        root.left = self.recur(preroot + 1, left, index - 1)
        root.right = self.recur(preroot + index - left + 1, index + 1, right)
        return root