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

Python初学者实现二叉搜索树遇contains方法参数缺失错误求助

解决BinarySearchTree.contains()的参数错误问题

看起来你遇到的是静态方法参数定义与调用不匹配引发的类型错误,我来帮你一步步梳理问题并修复:

错误原因拆解

你给contains方法添加了@staticmethod装饰器,这意味着这个方法不需要接收类实例(self)或者类本身(cls)作为第一个参数。但你在方法定义里写了def contains(self, root, value):,这就让方法要求传入三个参数,而你调用的时候只传了两个(n2和3),Python自然会报错提示缺少value参数。

修复后的代码示例

只需要去掉contains方法里多余的self参数即可,同时我补全了二叉搜索树的查找逻辑供你参考:

import collections

class BinarySearchTree:
    Node = collections.namedtuple('Node', ['left', 'right', 'value'])
    
    @staticmethod
    def contains(root, value):
        if root is None:
            return False
        if root.value == value:
            return True
        elif value < root.value:
            return BinarySearchTree.contains(root.left, value)
        else:
            return BinarySearchTree.contains(root.right, value)

# 调用示例(假设n2是你创建的Node实例)
n2 = BinarySearchTree.Node(left=None, right=None, value=2)
print(BinarySearchTree.contains(n2, 3))  # 现在会正常返回False,不再报错

额外小提示

如果你本来想把contains设计成需要访问类属性的类方法,那应该改用@classmethod装饰器,第一个参数换成cls;但在这个二叉搜索树查找的场景下,静态方法已经完全够用,因为我们只需要操作传入的节点和目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:34:55