二叉树 08. 从中序和后序遍历序列构造二叉树

题目:给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。  中等
方法一:递归  时间复杂度O(N)  空间复杂度O(N)

后序遍历的末尾为二叉树的根节点,中序遍历的中点为二叉树的根节点,将中序遍历的节点放进哈希表,很巧,方便后面找中点

def buildTree(inorder, postorder):
        """
        :type inorder: List[int]
        :type postorder: List[int]
        :rtype: TreeNode
        """
        dic = {val:idx for idx,val in enumerate(inorder)}
        def bt(l,r):
            if l > r:
                return 
            val = postorder.pop()
            root = TreeNode(val)
            mid = dic[val]
            root.right = bt(mid + 1,r)    # 这里应是先右后左,因为后序遍历出栈是先右子树
            root.left = bt(l,mid - 1)

            return root

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

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

posted @ 2022-07-15 10:59  Liang-ml  阅读(20)  评论(0)    收藏  举报