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

二叉树遍历为何需要辅助函数?以LeetCode 110题为例

关于LeetCode 110. 平衡二叉树无辅助函数解法的问题

我在研究LeetCode 110. Balanced Binary Tree的解法,题目要求判断给定二叉树是否为高度平衡二叉树(高度平衡二叉树指每个节点的两个子树深度差不超过1)。我发现社区所有解法都使用了辅助函数,其他二叉树遍历类问题也普遍如此。我尝试不使用辅助函数实现的代码逻辑与标准解法类似,但部分测试用例无法通过,想了解其中原因。

标准解法

class Solution(object):
    def isBalanced(self, root):
        def dfs(root):
            if not root:
                return [True, 0]
            left = dfs(root.left)
            right = dfs(root.right)
            balanced = left[0] and right[0] and abs(left[1] - right[1]) <= 1
            return [balanced, 1 + max(left[1], right[1])]
        return dfs(root)[0]

我的代码

class Solution(object):
    def isBalanced(self, root):
        if not root:
            return [True, 0]
        left = self.isBalanced(root.left)
        right = self.isBalanced(root.right)
        balanced = left[0] and right[0] and abs(left[1] - right[1]) <= 1
        return [balanced, 1 + max(left[1], right[1])]

问题原因

你的代码核心逻辑和标准解法完全一致,但问题出在返回值不符合题目要求的接口规范。

LeetCode对isBalanced函数的要求是返回布尔值(True或False),但你的代码返回的是一个包含布尔值和树高度的列表[balanced, height]。当LeetCode调用你的函数时,它会直接把这个列表当作最终结果处理:

  • 哪怕树是不平衡的,你返回的[False, x]在Python的布尔判断里会被认定为True(非空列表都为真),这就导致测试用例判断错误。
  • 标准解法里,内部辅助函数dfs负责返回列表,但外层的isBalanced会提取列表的第一个元素(布尔值)返回,完全符合题目要求的返回类型。

修复方案

如果你不想用辅助函数,可以调整代码,让函数在顶层调用时返回布尔值,递归过程中传递状态。比如可以改成这样:

class Solution(object):
    def isBalanced(self, root):
        # 用列表传递平衡状态,避免不可变类型无法在递归中修改外层变量的问题
        balanced = [True]
        
        def get_height(node):
            if not node or not balanced[0]:
                return 0
            left_h = get_height(node.left)
            right_h = get_height(node.right)
            if abs(left_h - right_h) > 1:
                balanced[0] = False
            return 1 + max(left_h, right_h)
        
        get_height(root)
        return balanced[0]

或者更简单的方式,还是保留辅助函数的写法——这也是社区解法普遍用辅助函数的原因:可以清晰区分内部递归逻辑(需要返回多个值)和对外接口(只需要返回布尔值),避免返回类型不匹配的问题。

内容的提问来源于stack exchange,提问作者evan.tann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:30:58