LeetCode #106. Construct Binary Tree from Inorder and Postorder Traversal

题目

106. Construct Binary Tree from Inorder and Postorder Traversal


解题方法

这道题与105. Construct Binary Tree from Preorder and Inorder Traversal的区别在于给的条件不同,之前给的是先序遍历和中序遍历,这次给的是中序遍历和后序遍历,但解决问题的思路类似,都是先通过前序和后序遍历确定根在中序的位置,再将其一分为二分别递归。

值得注意的是,面试中建议采用字典的方法来减少大量的计算时间。


代码

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        map_inorder = {}
        for i, val in enumerate(inorder):
            map_inorder[val] = i
        
        def recur(low, high):
            if low > high:
                return None
            x = TreeNode(postorder.pop())
            mid = map_inorder[x.val]
            x.right = recur(mid + 1, high)
            x.left = recur(low, mid - 1)
            return x
        
        return recur(0, len(inorder) - 1)
posted @ 2020-10-21 14:32  老鼠司令  阅读(78)  评论(0)    收藏  举报