【发布时间】:2022-01-27 16:32:23
【问题描述】:
我正在尝试实现二叉搜索树,并且我相信我的 insert 方法的逻辑非常好,但是当我运行它时,我的代码会引发“超出比较的最大递归深度”错误。
更新:我编辑了我的代码以修复最大递归深度,但现在我得到了不同的 AttributeError。
以下是我更新后的代码:
class BSTNode:
def __init__(self, key, value=None):
self.key = key
self.value = value
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
self.size = 0
def insert(self, key, value):
if self.root is None:
self.root = BSTNode(key, value)
elif key < self.root.key:
if self.root.left is None:
self.root.left = BSTNode(key, value)
else:
self.root.left.insert(key, value)
elif key > self.root.key:
if self.root.right is None:
self.root.right = BSTNode(key, value)
else:
self.root.right.insert(key, value)
return self.root
if __name__ == '__main__':
T = BST()
T.insert(5, 'Mujeeb')
T.insert(4, 'Hamza')
T.insert(7, 'Ayesha')
T.insert(9, 'Mahnoor')
T.insert(11, 'Ali')
print(T.root.right.key)
我得到的错误:
---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
<ipython-input-29-1eef6d5c8be5> in <module>
23 T = BST()
24 T.insert(5, 'Mujeeb')
---> 25 T.insert(4, 'Hamza')
26 T.insert(7, 'Ayesha')
27
<ipython-input-29-1eef6d5c8be5> in insert(self, key, value)
15 self.root = BSTNode(key, value)
16 elif key < self.root.key:
---> 17 self.root.left = self.insert(key, value)
18 elif key > self.root.key:
19 self.root.right = self.insert(key, value)
... last 1 frames repeated, from the frame below ...
<ipython-input-29-1eef6d5c8be5> in insert(self, key, value)
15 self.root = BSTNode(key, value)
16 elif key < self.root.key:
---> 17 self.root.left = self.insert(key, value)
18 elif key > self.root.key:
19 self.root.right = self.insert(key, value)
RecursionError: maximum recursion depth exceeded in comparison
更新后的代码出现的新错误:
AttributeError Traceback (most recent call last)
<ipython-input-23-8ebfd3bbaceb> in <module>
30 if __name__ == '__main__':
31 T = BST()
---> 32 T.insert(5, 'Mujeeb')
33 T.insert(4, 'Hamza')
34 T.insert(7, 'Ayesha')
<ipython-input-23-8ebfd3bbaceb> in insert(self, key, value)
14 if self.root is None:
15 self.root = BSTNode(key, value)
---> 16 self.root.insert(key, value)
17 elif key < self.root.key:
18 if self.root.left is None:
AttributeError: 'BSTNode' object has no attribute 'insert'
如果您能提供任何指标来说明我在哪里出了问题,我将不胜感激,谢谢。
【问题讨论】:
-
你无限地调用
self.insert。在右侧或左侧节点上调用insert。 -
你能详细说明一下吗?如果我在右节点或左节点上调用插入,则会抛出 Nonetype 对象没有属性插入的错误
-
root == None的情况你好像知道怎么处理了;将该逻辑应用于这些分支... -
@ScottHunter 明白了!
-
@ScottHunter 将该逻辑扩展到这两种情况后,我得到一个不同的错误,即 BSTNode 没有属性插入...
标签: python python-3.x recursion data-structures binary-search-tree