[英]Python Binary Search Tree: Search function error
class Node:
def __init__(self, key, parent = None):
self.key = key
self.parent = parent
self.left = None
self.right = None
if parent != None:
if key < parent.key:
parent.left = self
else:
parent.right = self
def search(self, key):
if self == None:
return (False, None)
if self.key == key:
return (True, self)
elif self.key > key:
return self.left.search(key)
elif self.key < key:
return self.right.search(key)
else:
return (False, self)
t1 = Node(25)
t2 = Node(12, t1)
t3 = Node(18, t2)
t4 = Node(40, t1)
print('-- Testing search -- ')
(b, found_node) = t1.search(18)
assert b and found_node.key == 18, 'test 8 failed'
(b, found_node) = t1.search(25)
assert b and found_node.key == 25, 'test 9 failed'
(b, found_node) = t1.search(26)
assert(not b), 'test 10 failed'
assert(found_node.key == 40), 'test 11 failed'
Traceback (most recent call last):
File "/Users/user/PycharmProjects/practice/main.py", line 50, in <module>
(b, found_node) = t1.search(26)
File "/Users/user/PycharmProjects/practice/main.py", line 27, in search
return self.right.search(key)
File "/Users/user/PycharmProjects/practice/main.py", line 25, in search
return self.left.search(key)
AttributeError: 'NoneType' object has no attribute 'search'
我的搜索 function 在递归调用 search(self.left, key) 和 search(self.right, key) 时出错。 它说 search() 占用 2 个位置 arguments,但得到 3 个,我不明白这是怎么发生的?
我真的对这个问题放了个屁……感谢那些提醒我 function 被调用的 self 实例被隐式传递,我忘记了对象的基础知识,我猜大声笑。 此实现通过了测试用例。 如果有更好的实现方法,请随时发布,因为我很乐意看到它们......
def search(self, key):
if self == None:
return (False, self)
if self.key == key:
return (True, self)
elif self.key > key:
if self.left == None:
return (False, self)
else:
return self.left.search(key)
else:
if self.right == None:
return (False, self)
else:
return self.right.search(key)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.