我有两个类,Node()和binarySearchTree()。 Node()具有以下属性:
self.left= None
self.right= None
self.key= key
self.data = data
binarySearchTree()具有插入、搜索和打印二进制搜索树(BST)的方法。我还必须为我的BST包含一个__contains__
方法,它使我能够编写如下内容:
tree= Bintree()
tree.store("table")
if "table" in tree: <--
do something <--
它抱怨最后两个“__contains__
”没有定义。但我希望它能递归地工作。但它不起作用
def __contains__(self, key):
if self.root == None:
return False
elif key== self.root.key:
return True
elif key < self.root.key:
return __contains__(self.root.key.left,key)
elif key > self.root.key:
return __contains__(self.root.key.right,key)
如果有单独的树和节点类型,则需要两个函数,一个通过节点递归,另一个只是为了让事情继续进行
大概是这样的:
或者,您可以将工作划分为两个类,如下所示
在树类中:
在节点类中:
__contains__
不是全局变量;它是一个类属性,因此必须通过BinTree
或其实例之一进行访问。至少,你需要写作(请注意,第一个参数中不需要
key
属性;具有left
和right
属性的是self.root
本身,而不是它的键但是,这只是调用实例属性的一种非标准方法,它会阻止继承正确工作。如果您更改类的名称而不更新方法的定义以使用新名称,它也会失败。下一个最好的方法是正常调用该方法
但最重要的是不要直接调用
__contains__
,而是使用来使用in
,这将为您调用__contains__
警告:以上所有假设
self.root.left
和self.root.right
存在且不是None
,这一假设可能不准确,但如果没有显示BinTree
如何构造的代码,则无法确认琐碎的修理
只要打电话
self.__contains__
相关问题 更多 >
编程相关推荐