二叉树中序迭代遍历python

# 中序遍历-迭代-LC94_二叉树的中序遍历
class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        stack = []  # 不能提前将root结点加入stack中
        result = []
        cur = root
        while cur or stack:
            # 先迭代访问最底层的左子树结点
            if cur:     
                stack.append(cur)
                cur = cur.left		
            # 到达最左结点后处理栈顶结点    
            else:		
                cur = stack.pop()
                result.append(cur.val)
                # 取栈顶元素右结点
                cur = cur.right	
        return result

代码来自代码随想录,具体的见此链接
在这里插入图片描述
这段代码实现了二叉树的中序遍历(Inorder Traversal),使用的是迭代的方式。以下是对代码的详细解释:

  1. 类及方法定义

    • 定义了一个名为 Solution 的类,其中包含一个方法 inorderTraversal,接受一个参数 root,表示二叉树的根节点。
  2. 边界条件

    • 首先检查根节点 root 是否为空。如果为空,直接返回一个空的列表,因为没有节点可以遍历。
  3. 初始化数据结构

    • 创建一个空的栈 stack 用于存放节点,后续通过这个栈来实现遍历。
    • 创建一个空的列表 result,用于存放中序遍历的结果。
    • 设计一个指针 cur 初始化为根节点 root,用来跟踪当前遍历到的节点。
  4. 遍历过程

    • 使用 while 循环,条件是当前节点 cur 不为空或栈 stack 不为空,确保可以继续遍历。
    • 访问左子树
      • 如果 cur 非空,将当前节点 cur 压入栈中,并移动到其左子节点 cur.left
    • 处理栈顶节点
      • cur 为空时,表示已到达最左边的节点,接下来从栈中弹出节点(即访问当前节点),并将其值添加到结果列表 result 中。
      • 然后将 cur 更新为刚刚弹出的节点的右子节点 cur.right,以便进一步遍历。
  5. 返回结果

    • 当循环结束(即没有更多节点可访问时),返回 result 列表,它包含了按中序遍历顺序访问的节点值。

总结

这段代码通过栈实现了二叉树的中序遍历。中序遍历的顺序为:先访问左子树,再访问根节点,最后访问右子树。该算法的时间复杂度为 O(n),空间复杂度为 O(h),其中 n 是节点总数,h 是树的高度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值