You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树中序遍历递归代码执行逻辑理解疑问

中序遍历递归代码的完整执行流程修正

你的梳理只覆盖了递归深入到最左子节点的部分,遗漏了递归回溯后的关键步骤——中序遍历的核心逻辑是「左子树遍历完成 → 处理当前节点 → 右子树遍历」,递归调用返回后会回到父节点的上下文继续执行后续代码。下面针对二叉树[5,8,7](根5,左子节点8,右子节点7),完整拆解执行流程:

  1. 首次调用 inorderTraversal(root=5, result=None)

    • 因为result为None,创建空列表result = []
    • root不为空,执行左子树调用:self.inorderTraversal(root.left=8, result=[])
  2. 第二次调用 inorderTraversal(root=8, result=[])

    • result已存在,跳过初始化
    • root不为空,执行左子树调用:self.inorderTraversal(root.left=None, result=[])
  3. 第三次调用 inorderTraversal(root=None, result=[])

    • root为空,直接返回result(此时为空列表)

以下是你之前遗漏的回溯流程:

  1. 回到第二次调用(root=8)的上下文

    • 左子树遍历完成,执行result.append(8),此时result = [8]
    • 接着执行右子树调用:self.inorderTraversal(root.right=None, result=[8])
  2. 第四次调用 inorderTraversal(root=None, result=[8])

    • root为空,返回result(仍为[8])
  3. 回到首次调用(root=5)的上下文

    • 左子树遍历完成,执行result.append(5),此时result = [8,5]
    • 接着执行右子树调用:self.inorderTraversal(root.right=7, result=[8,5])
  4. 第五次调用 inorderTraversal(root=7, result=[8,5])

    • result已存在,跳过初始化
    • root不为空,执行左子树调用:self.inorderTraversal(root.left=None, result=[8,5])
  5. 第六次调用 inorderTraversal(root=None, result=[8,5])

    • root为空,返回result
  6. 回到第五次调用(root=7)的上下文

    • 左子树遍历完成,执行result.append(7),此时result = [8,5,7]
    • 接着执行右子树调用:self.inorderTraversal(root.right=None, result=[8,5,7])
  7. 第七次调用 inorderTraversal(root=None, result=[8,5,7])

    • root为空,返回result
  8. 回到首次调用(root=5)的上下文

    • 右子树遍历完成,返回最终结果[8,5,7]

你的核心误区

你只追踪了递归「向下深入」的过程,没考虑到递归调用返回后,会回到父节点的代码中继续执行当前节点值的添加和右子树的遍历,这才是中序遍历「左-根-右」逻辑的完整实现。

内容的提问来源于stack exchange,提问作者user1190361

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:23:39