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

LeetCode二叉树前序遍历递归解法单节点测试用例输出异常排查

问题原因与修复方案

核心问题根源

你遇到的是Python的可变默认参数特性导致的异常,和二叉树遍历逻辑本身无关。
Python的函数默认参数是在函数定义阶段完成初始化的,而非每次调用函数时重新生成。你将preorderTraversal的第二个参数默认值设为[],这个列表对象只会在类加载、函数第一次定义时创建一次,后续所有不传第二个参数的调用,都会复用同一个列表对象。

异常结果的来源

LeetCode执行测试用例时,会多次调用你编写的preorderTraversal方法处理不同输入。你遇到的[1,2,3,1]结果,就是前一个测试用例(通常是[1,null,2,3])执行后已经往共享列表里写入了[1,2,3],后续跑[1]用例时又往同一个列表追加了1,最终得到错误输出。

修复方案

方案1:调整默认参数初始化逻辑

将默认参数改为None,每次调用不传参数时重新初始化空列表,避免复用同一个对象:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
     def preorderTraversal(self, root: TreeNode, node_list = None) -> List[int]:
        if not root:
            return []
        if node_list is None:
            node_list = []
        node_list.append(root.val)
        for leaf in (root.left, root.right):
            if leaf is not None:
                self.preorderTraversal(leaf, node_list)
        return node_list

方案2:无参数递归写法

不通过传参共享列表,每次递归返回当前子树的遍历结果拼接,逻辑更简洁:

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:03