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

二叉树递归调用顺序可视化困惑及节点深度算法疑问

Node Depths递归解法疑问解答

问题1:depth=1(node.value=2)执行step3后为何出现新的step1?

梳理完整调用流程就能明白:

  1. 初始调用helper(root=节点1, depth=0):打印0 step1,不满足前两个if判断,打印0 step4,接着调用左子树的helper(root=节点2, depth=1)。
  2. 进入helper(root=节点2, depth=1):打印1 step1,满足第二个if(节点2是叶子节点,左右子节点都为null),打印1 step3,随后return depth=1,这个函数调用直接结束,回到上一层(节点1的helper调用)中leftSum = helper(...)的位置。
  3. 节点1的helper调用继续执行下一步:调用右子树的helper(root=null, depth=0+1=1),这是一次新的helper调用,所以会打印1 step1,然后满足第一个if(root为null),打印1 step2,return 0。

你看到的不是“回到step1”,而是触发了新的helper调用(处理节点1的右空节点),所以才会再次打印1 step1。

问题2:调用栈返回的数值为何是累加?

首先明确Node Depths的核心需求:计算所有节点的深度之和(根节点深度为0,子节点深度依次加1)。你的递归逻辑完全对应这个需求的拆解:

  • 对于任意节点,它对应的总深度和 = 当前节点的深度 + 左子树所有节点的深度和 + 右子树所有节点的深度和。
  • 叶子节点(无左右子节点)的总深度和就是自己的深度,因为没有子节点需要计算,所以直接return depth。
  • 空节点没有深度贡献,所以return 0。

拿你的测试用例举例:

  • 节点1的深度是0,左子树(节点2)的总深度和是1,右子树(空节点)的总深度和是0,所以总和是0 + 1 + 0 = 1,正好是两个节点的深度之和(0+1)。

递归的每一层返回的都是当前子树的深度和,上层调用把当前节点的深度、左子树结果、右子树结果相加,就是当前整棵树的深度和——这是由问题的求和本质决定的,所以必然是累加,而非其他运算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:35:19