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

二叉树中序遍历空return的作用及控制转移问题解析

二叉树中序遍历递归代码详解:逻辑、空return作用及控制权转移分析

先把我们要分析的代码贴出来,方便对照:

void printInorder(Node node) {
    if (node == null) return;
    printInorder(node.left);
    System.out.print(node.key + " ");
    printInorder(node.right);
}

一、遍历逻辑分步拆解

中序遍历的核心规则是左子树 → 根节点 → 右子树,这段递归代码完美贴合这个规则,我们一步步看它的执行流程:

  • 每次调用printInorder时,首先检查传入的节点是否为空。如果不为空,先一头扎进左子树的递归遍历——这会一直递归下去,直到找到树最左侧的“尽头”(也就是某个叶子节点的左孩子,值为null)。
  • 当左子树的遍历彻底完成(遇到null返回后),才会执行System.out.print(node.key + " "),也就是打印当前节点的值。
  • 打印完当前节点后,再递归遍历它的右子树,同样遵循“左→根→右”的顺序处理右子树的所有节点。

举个直观的例子,比如我们有这样一棵二叉树:

1
     \
      2
     /
    3

它的遍历过程是:

  1. 调用printInorder(1),节点不为空,先执行printInorder(1.left)(也就是null),触发return回到printInorder(1)。
  2. 打印1 。
  3. 调用printInorder(1.right)(节点2)。
  4. 在printInorder(2)中,先执行printInorder(2.left)(节点3)。
  5. 在printInorder(3)中,执行printInorder(3.left)(null),return后打印3 。
  6. 执行printInorder(3.right)(null),return回到printInorder(3),函数执行完毕回到printInorder(2)。
  7. 打印2 。
  8. 执行printInorder(2.right)(null),return回到printInorder(2),函数执行完毕回到最初的调用,遍历结束。最终输出是1 3 2 。

二、空return的作用分步说明

这个if (node == null) return;是递归代码的灵魂,它的作用可以拆成三点:

  • 终止递归的边界:当传入的节点是null时,说明已经走到了树的“末梢”,没有可遍历的节点了,这时候用return直接结束当前函数调用,避免继续执行后面的递归逻辑,防止出现空指针异常(比如去访问null.left)。
  • 触发回溯的关键:每次遇到null返回后,程序会回到上一层的递归调用中,继续执行后续代码。比如刚才例子中,printInorder(3.left)返回后,才会执行打印3的key,这就是回溯的过程——从树的末梢回到上层节点,完成节点的处理。
  • 避免无效操作:如果没有这个return,当node为null时,程序会继续执行printInorder(node.left),这时候因为null没有left属性,会直接抛出NullPointerException,导致程序崩溃。所以这个return是保护程序正常运行的必要条件。

三、执行printInorder(node.right)且传入的参数为null时,控制权转移到哪里?

首先要明确:只有当当前node不为null时,才会执行printInorder(node.right)——如果node.right是null,那么调用的就是printInorder(null),这时候会触发return,程序的控制权会回到调用这个printInorder(null)的上层函数调用的下一行代码。

还是用刚才的例子来说:在printInorder(3)中,执行完printInorder(3.right)(也就是null,进入printInorder(null)执行return后),控制权会回到printInorder(3)中printInorder(3.right)的下一行——也就是printInorder(3)的函数末尾,此时printInorder(3)执行完毕,会回到调用它的printInorder(2)中printInorder(2.left)的下一行,也就是执行打印2的key的代码。

简单总结:当printInorder(null)执行return后,程序会回到发起这个null调用的那行代码的下一行,继续执行上层递归的剩余逻辑。

内容的提问来源于stack exchange,提问作者Rahul Kashyap Rajput

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:33:51