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
相关产品推荐
相关产品推荐

