📅  最后修改于: 2023-12-03 15:06:39.287000             🧑  作者: Mango
二叉搜索树(Binary Search Tree,简称BST)是一种二叉树,它的左子树中的节点都比根节点小,右子树中的节点都比根节点大。一棵树可以有多个二叉搜索树的预遍历,但是只有一个符合要求的后遍历。本文介绍如何从二叉搜索树的预遍历中查找符合要求的后遍历。
二叉搜索树的后遍历和前遍历是一样的,只不过遍历的顺序与前遍历相反。因此,我们可以从前遍历开始构造二叉搜索树,然后再进行后遍历。
具体构造过程如下:
最后,对构建好的二叉搜索树进行后遍历即可得到符合要求的后遍历。
def construct_bst(preorder):
if not preorder:
return None
root = TreeNode(preorder[0])
i = 1
while i < len(preorder) and preorder[i] < root.val:
i += 1
root.left = construct_bst(preorder[1:i])
root.right = construct_bst(preorder[i:])
return root
def postorder_traversal(root):
if not root:
return []
return postorder_traversal(root.left) + postorder_traversal(root.right) + [root.val]
preorder = [5, 3, 1, 4, 7, 6, 8]
root = construct_bst(preorder)
postorder = postorder_traversal(root)
print(postorder) # [1, 4, 3, 6, 8, 7, 5]
以上代码中,construct_bst
函数用于构造二叉搜索树,postorder_traversal
函数用于进行后遍历。输入为一个二叉搜索树的前遍历,输出为符合要求的后遍历。