【发布时间】:2020-05-13 20:31:40
【问题描述】:
我在运行按顺序遍历作为我的类的方法时遇到问题。
class BST:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
def insert(self,data):
if self.data < data:
#insert right
if self.right is None:
self.right = BST(data)
else:
insert(self.right, data)
else:
if self.left is None:
self.left = BST(data)
else:
insert(self.left,data)
def inorder(self):
if self.left:
inorder(self.left)
print(self.data)
if self.right:
inorder(self.right)
r = BST('50')
r.insert('60')
r.insert('40')
r.inorder()
这适用于插入。请注意,我没有使用 self.insert,只是为了递归而插入。
以下是我在BST类中的有序遍历方法
def inorder(self):
if self.left:
inorder(self.left)
print(self.data)
if self.right:
inorder(self.right)
这会引发错误提示
30 r.insert('60')
31 r.insert('40')
---> 32 r.inorder()
33 print(r.right.data)
34 print(r.left.data)
AttributeError: 'BST' 对象没有属性 'inorder'。
我尝试使用 self.inorder(),它说它收到了两个争论,尽管它期待一个。
但是,如果我从 inorder(Self.left) 到 self.left.inorder(),它工作正常。
有人可以解释一下为什么会这样吗? 另外,在类方法中使用 self.function_name 进行递归调用是否重要,因为我的插入函数仍然有效?
【问题讨论】:
-
您能否更新您的代码以将整个类定义包含在一个 sn-p 中,然后包含您定义
r并对其执行操作的所有行? -
@awarrier99 我已经编辑了这个问题,如果我遗漏了更多细节,你能告诉我吗?
-
看起来不错,但您能否也说明一下您在哪里定义了
inorder函数?它不是类定义的一部分吗? -
您的代码中是否有
insert函数?那样运行是不可能的。 -
我马上就发现了一些问题。当你试图递归调用一个类方法时,你需要使用 self 前缀 Ie 来调用它。
self.method。我看到的另一个问题是您在这些递归调用中传递的变量。例如,当您定义insert方法时,您指定了一个参数,但在递归调用中传递了两个参数。
标签: python-3.x algorithm binary-search-tree