首页 > 解决方案 > 如何从给定的二叉搜索树的后序遍历中找到前序遍历

问题描述

我有一个像 [3,6,5,1,12,16,15,10,20,7] 这样的 BST 的后序遍历,我想找到它的像 [7,1,5, 3,6,20,10,15,12,16]。是否可以在不构建树的情况下找到递归解决方案?[已编辑]

标签: pythonpython-3.x

解决方案


这是一个没有构建树的递归函数。它从末尾到开头遍历 post order 列表,因为这几乎代表了所需的顺序,除了以相反的顺序访问子项:

def preordered(postorder):
    def recur(granny, parent):
        if not postorder or postorder[-1] < min(granny, parent):
            return []
        value = postorder.pop()
        right = recur(parent, value)
        left = recur(parent, value)
        return [value] + left + right

    low = min(postorder)
    postorder = postorder[:]
    return recur(low, low)

result = preordered([3,6,5,1,12,16,15,10,20,7])

推荐阅读