二叉树 09. 从中序和先序遍历序列构造二叉树

题目:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。  中等

方法一:迭代  时间复杂度O(N)  空间复杂度O(N)

def buildTree(preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        dic = {val:idx for idx,val in enumerate(inorder)}
        def bt(l,r):
            if l > r:
                return None
            
            val = preorder.pop(0)
            root = TreeNode(val)
            mid = dic[val]

            root.left = bt(l,mid - 1)    # 这里是先左子树
            root.right = bt(mid + 1,r)

            return root

        return bt(0,len(inorder) - 1)

 

posted @ 2022-07-15 11:05  Liang-ml  阅读(22)  评论(0)    收藏  举报