繁体   English   中英

Python 二叉搜索树:搜索 function 错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM