使用 Python 中的 Stack 根据给定的后序遍历构造 BST
pythonserver side programmingprogramming更新于 2025/10/17 10:20:17
假设我们有一个二叉搜索树的后序遍历;我们必须从中找到二叉搜索树。
因此,如果输入为 [6, 12, 10, 55, 45, 15],则输出将

为了解决这个问题,我们将遵循以下步骤 −
定义一个函数solve()。这将采用后序
n := 后序的大小
root := 使用后序的最后一个元素创建一个新的树节点
stk := 一个堆栈
将根插入 stk
i := n - 2
当 i >= 0 时,执行
x := 使用值 postorder[i] 创建一个新节点
当 stk 不为空且 postorder[i] < stk 顶部的值,执行
temp := stk 顶部
从 stk 中删除顶部元素
如果 temp 不为空,则
temp.left := x
否则,
stk 顶部元素的右侧 := x
将 x 插入 stk
i := i - 1
返回根
从主方法执行以下操作−
返回 resolve(postorder)
示例
让我们看看下面的实现以便更好地理解 −
class TreeNode: def __init__(self, data = 0): self.val = data self.left = None self.right = None def solve(postorder): n = len(postorder) root = TreeNode(postorder[n - 1]) stk = [] stk.append(root) i = n - 2 while ( i >= 0): x = TreeNode(postorder[i]) temp = None while (len(stk) > 0 and postorder[i] < stk[-1].val) : temp = stk[-1] stk.pop() if (temp != None): temp.left = x else: stk[-1].right = x stk.append(x) i = i - 1 return root def build_tree(postorder): return solve(postorder) def inord( node): if node: inord(node.left) print( node.val, end = " ") inord(node.right) postorder = [6, 12, 10, 55, 45, 15] root = build_tree(postorder) print( "Inorder traversal:", end = " ") inord(root)
输入
[6, 12, 10, 55, 45, 15]
输出
6 10 12 15 45 55
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

