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

递归函数终止条件是否存在返回?两段二叉树中序遍历代码对比疑问

两段递归代码的运行逻辑说明

这两段中序遍历的递归代码执行逻辑完全等价,运行效果没有任何差异,核心原因是Python的函数默认返回规则:

  • 第一段代码的逻辑是:判断节点为空时主动执行return终止函数,节点非空时才执行左子树遍历、节点值写入、右子树遍历的操作
  • 第二段代码的逻辑是:仅当节点非空时才进入if代码块执行遍历操作,如果节点为空则不会进入if块,函数没有可执行的代码会自动隐式返回,效果和手动写return完全一致

举个简单的测试场景:给dfs传入空节点None

  1. 第一段代码触发if not node: return,直接结束函数调用,无任何额外操作
  2. 第二段代码if node判断为假,跳过整个if块的所有代码,函数执行完毕自动返回,同样无任何额外操作

两种写法只是把判断条件反过来写,最终对递归终止的控制效果完全相同,不存在逻辑差异。日常编码更推荐第一种写法,把递归终止边界放在函数开头,逻辑更直观,写复杂递归时不容易出现边界漏判的问题。


写法1:空节点主动返回

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        def dfs(node):
            if not node: return
            dfs(node.left)
            result.append(node.val)
            dfs(node.right)
        dfs(root)
        return result

写法2:非空节点才执行逻辑

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        def dfs(node):
            if node:
                dfs(node.left)
                result.append(node.val)
                dfs(node.right)
        dfs(root)
        return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:00