【发布时间】:2018-03-10 10:48:16
【问题描述】:
我在使用 Python 学习 BST 并尝试实现 insert 和 find 方法。但是我在 insertNode 方法中遇到了最大递归深度超出错误。我是 BST 数据结构的新手,因此很难在 Python 中实现这些方法。我尝试研究并使我的代码类似于互联网上的代码,但我仍然收到错误消息。
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def insert(self,data):
temp = Node(data)
if self.root is None:
self.root = temp
else:
self.insertNode(self.root,data)
def insertNode(self,root,data):
temp = Node(data)
if data < self.root.data:
if self.root.left is None:
self.root.left = temp
else:
self.insertNode(self.root.left,data)
elif data > self.root.data:
if self.root.right is None:
self.root.right = temp
else:
self.insertNode(self.root.right,data)
def findinTree(self,root,data):
if self.root is None:
return False
if data == self.root.data:
return True
if data < self.root.data:
self.findinTree(self.root.left,data)
else:
self.findinTree(self.root.right,data)
return False
bst = BST()
bst.insert(30)
bst.insert(10)
bst.insert(50)
bst.insert(90)
bst.insert(100)
bst.insert(15)
请帮助调试错误,以便功能按预期工作。
【问题讨论】:
-
确切的错误是什么,它发生在哪一行?你能把错误跟踪贴在这里吗?
-
您可以使用
sys.setrecursionlimit增加递归限制。请注意,python 堆栈帧可能会变得非常大。 -
Traceback(最近一次调用最后一次):文件“python”,第 47 行,在
文件“python”,第 16 行,插入文件“python”,第 29 行,insertNode 文件中“ python”,第 29 行,insertNode 文件中的“python”,第 29 行,insertNode 文件中的“python”,第 29 行,insertNode 文件中的“python”,第 19 行,insertNode RuntimeError:最大递归深度超出@ShreyasG -
请使用堆栈跟踪更新您的问题 - 它会更容易阅读。我还可以在您的代码中看到问题,例如:
def insertNode(self,root,data):你有一个root参数,你没有在方法中使用它。 -
另外,您正在创建太多临时节点。仅在真正需要时才可以创建节点。
标签: python algorithm recursion binary-search-tree