📌  相关文章
📜  迭代前序遍历(1)

📅  最后修改于: 2023-12-03 14:57:58.179000             🧑  作者: Mango

迭代前序遍历

简介

前序遍历是二叉树遍历方式之一,它的访问顺序是先访问根节点,再依次遍历左右子树。迭代前序遍历是在不使用递归的情况下完成前序遍历。

实现思路
  • 使用栈存储节点
  • 从根节点开始循环处理:
    1. 将根节点压入栈中
    2. 循环从栈中弹出一个节点并访问
    3. 如果该节点有右子节点,则压入栈中
    4. 如果该节点有左子节点,则压入栈中
  • 在循环完成后,所有节点都被访问了一次
代码实现
def preorder_traversal_iteratively(root):
    if root is None:
        return []
    stack, result = [root], []
    while stack:
        node = stack.pop()
        result.append(node.val)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return result
时间复杂度

迭代前序遍历的时间复杂度为$O(n)$,其中n为二叉树的节点数量。

空间复杂度

迭代前序遍历使用了一个栈,所以空间复杂度为$O(h)$,其中h为二叉树的高度。在最坏情况下,二叉树可能是一个类似链表一样的结构,此时h=n,空间复杂度为$O(n)$。