【问题标题】:How to find preorder traversal from given postorder traversal of binary search tree如何从给定的二叉搜索树的后序遍历中找到前序遍历
【发布时间】:2019-01-17 19:05:25
【问题描述】:

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

【问题讨论】:

  • 您的意思是“不使用递归”还是“同时使用递归解决方案”?
  • 我的意思是我想使用递归。
  • 无需添加[已编辑]。它已经反映在帖子下方。

标签: python python-3.x


【解决方案1】:

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

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多