python-3.x - 我正在尝试从头开始在 python 中构建 BST RecursionError:比较中超出了最大递归深度
问题描述
我正在尝试从头开始构建树,但出现最大递归错误。请帮我找出错误。
首先,我创建了一个节点并使用 make_node 函数,我正在尝试构建树。然后在中序函数的帮助下,我试图在节点中打印数据。
class node:
def __init__(self,data):
self.data = data
self.left = None;
self.right = None;
class tree:
def __init__(self):
self.start = None;
def make_node(self,data):
if(self.start==None):
self.start = node(data)
print(self.start.data)
return
#temp = self.start
if(self.start.data<data):
if(self.start.left == None):
print(self.start.left.data)
self.start.left = node(data)
else:
self.start.left(self.make_node(data))
elif(self.start.data>=data):
print(self.start.right.data)
if(self.start.right == None):
self.start.right = node(data)
else:
self.start.right(self.make_node(data))
def inorder(self):
#temp2 = self.start
if(self.start==None):
return
self.start = self.start
self.inorder(self.start.left)
print(self.start.data)
self.inoder(self.start.right)
BST = tree()
BST.make_node(2)
BST.make_node(3)
BST.make_node(4)
BST.make_node(5)
BST.inorder()
你们能帮我找出我的错误吗?提前致谢。
解决方案
我发现的错误:
1.不能这样调用函数: self.start.left(self.make_node(data))。因为self指的是树的对象,而不是节点的对象。对于引用 Node 对象,您可以作为参数传递。所以,我已经在你的代码中到处纠正了这个错误。
2.此外,您以相反的顺序使用了不等式,即根左侧的较大元素和右侧的较小元素......我在下面的代码中进行了更改。
节点类:
class node:
def __init__(self,data):
self.data = data
self.left = None;
self.right = None;
树类:
class tree:
def __init__(self):
self.start = None;
def make_node(self,Node,data):
if(Node == None):
Node = node(data)
if(self.start == None):
self.start = Node
return Node
if(Node.data>data):
Node.left = self.make_node(Node.left,data)
elif(Node.data<=data):
Node.right = self.make_node(Node.right,data)
return Node
def inorder(self,root):
if(root==None):
return
self.inorder(root.left)
print(root.data)
self.inorder(root.right)
构建树并使用 inorder 函数:
BST = tree()
BST.make_node(BST.start,2)
BST.make_node(BST.start,3)
BST.make_node(BST.start,4)
BST.make_node(BST.start,5)
BST.inorder(BST.start)
推荐阅读
- c++ - 通过socket c++发送长度和数据
- r - 在 case_when() 中抛出错误
- java - 编写一个程序,打印一行中两个选定数字的乘积
- c - 在 Fortran 中使用 FFTW 的 r2r 类型的 3-D 正弦变换中的泊松方程求解器
- .net - What's the difference between 'dotnet-sdk-2.1.401-osx-x64.pkg' and 'dotnet-sdk-2.1.401-osx-gs-x64.pkg'?
- python - Pandas isna() 和 isnull(),有什么区别?
- amazon-web-services - AWS 云形成;将模板分解为多个文件并使用 cfn-include 传入变量
- algorithm - 确定乘积和多项式中最佳权重的快速算法?
- scala - Scala Hello World:NoSuchMethodError:java.nio.ByteBuffer.clear
- javascript - 滚动后触发JQuery动画scrollTop