Python 中的二叉树后序遍历
pythonserver side programmingprogramming更新于 2026/1/15 10:52:17
假设我们有一棵二叉树。我们必须使用迭代方法找到这棵树的后序遍历。因此,如果树像 −

然后输出将是:[9,15,7,10,-10]
为了解决这个问题,我们将遵循以下步骤 −
如果 root 为 null,则返回空数组
创建一个数组 ret
stack := 定义一个带有 [root, 0] 对的堆栈
当堆栈不为空时 −
node := 堆栈顶部,然后从中删除元素堆栈。
如果节点对的第二个值为 0,则
当前 := 节点对的第一个值
将一对 (当前,1) 插入堆栈
如果当前的右侧存在 −
将一对 [当前右侧,0] 插入堆栈
如果当前的左侧存在 −
将一对 [当前左侧,0] 插入堆栈
否则,当第一个值节点对的数据不为 0 时,将节点的第一个值的数据插入res
return res
示例
让我们看看下面的实现,以便更好地理解 −
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def postorderTraversal(self, root): if not root: return [] res = [] stack = [[root,0]] while stack: node = stack[-1] stack.pop() if node[1]== 0 : current = node[0] stack.append([current,1]) if current.right: stack.append([current.right,0]) if current.left: stack.append([current.left,0]) else: if node[0].data != 0: res.append(node[0].data) return res ob = Solution() root = make_tree([-10,9,10,None,None,15,7]) print(ob.postorderTraversal(root))
输入
[-10,9,10,None,None,15,7]
输出
[9, 15, 7, 10, -10]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

