📅  最后修改于: 2023-12-03 14:57:58.210000             🧑  作者: Mango
在二叉树的遍历中,后序遍历就是遍历顺序为左子树-->右子树-->父节点。递归方法很容易实现,但是迭代方法却比较困难,本文将会介绍使用一叠迭代方法实现二叉树的后序遍历的方法。
与前序遍历和中序遍历不同,后序遍历需要在访问完左右子树之后才能访问根节点。因此需要在遍历过程中记录已经遍历的右子树。具体方法是使用一个栈来存储节点,并且在出栈时检查当前节点的右子树是否已经遍历,如果已经遍历就访问当前节点,否则将右子树入栈。
def postorderTraversal(root):
stack = []
last_visited = None
result = []
while root or stack:
while root:
stack.append(root)
root = root.left
node = stack[-1]
if not node.right or node.right == last_visited:
result.append(node.val)
stack.pop()
last_visited = node
else:
root = node.right
return result
由于每个节点最多入栈一次,出栈一次,所以时间复杂度为 $O(n)$。空间复杂度最差情况下为 $O(n)$,即树为一条链的情况下。