如何理解迭代遍历

在这里插入图片描述
在上一篇文章中,我们用递归法解决了这个问题,那如何用迭代遍历解决此问题呢?

# 前序遍历-迭代-LC144_二叉树的前序遍历
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        # 根结点为空则返回空列表
        if not root:
            return []
        stack = [root]
        result = []
        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

代码来自代码随想录
这段代码实现了二叉树的前序遍历(Pre-order Traversal),使用了迭代的方式。这种遍历顺序是:首先访问根节点,然后访问左子树,最后访问右子树。

下面是对代码的逐行解释:

  1. class Solution: 定义了一个名为 Solution 的类。

  2. def preorderTraversal(self, root: TreeNode) -> List[int]: 定义了该类中的一个方法 preorderTraversal,接收一个二叉树的根节点 root,返回一个整数列表。

  3. if not root: 检查根节点是否为空。如果为空,执行下一行。

  4. return [] 如果根节点为空,返回一个空列表,表示没有节点可遍历。

  5. stack = [root] 创建一个栈,并将根节点压入栈中。

  6. result = [] 初始化一个空列表 result,用于存储遍历结果。

  7. while stack: 当栈不为空时,进入循环。

  8. node = stack.pop() 从栈中弹出一个节点,将其赋值给 node,这就是当前要处理的节点。

  9. result.append(node.val) 将当前节点的值添加到结果列表中。

  10. if node.right: 检查当前节点是否有右子树。如果有,则执行下一行。

  11. stack.append(node.right) 将右子节点压入栈中,确保在左子节点之前被处理。

  12. if node.left: 检查当前节点是否有左子树。如果有,则执行下一行。

  13. stack.append(node.left) 将左子节点压入栈中。

  14. return result 当栈为空时,结束循环,返回结果列表,其中包含了按照前序遍历顺序访问的节点值。

总体上,这段代码使用栈结构模拟递归的方式,以迭代的方式实现了二叉树的前序遍历,保证了在处理节点时能够按照根、左、右的顺序访问。

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值