所以Python并没有真正做到这一点。我有一个名为tree的类,它是一个二叉树类型。在
class Tree(object):
def __init__(self):
self.left = None
self.right = None
self.data = None
def filler(self, lista, tree):
tree = Tree()
nr = len(lista)
nr //= 2
if len(lista) == 0:
return
if len(lista) == 1:
tree.data = lista[0]
return
tree.data = lista[nr]
self.filler(lista[:nr], tree.left)
self.filler(lista[nr:], tree.right)
函数filler()
将列表转换为二叉树。我试着这样称呼它:
结果是None
。filler()
不执行任何操作。我能做点什么吗?我可以通过引用传递tr2
对象吗?如果不能通过引用传递列表,如何将其转换为二叉树?在
在填充物中没有树倒立的回溯:
Traceback (most recent call last):
File "D:/Projects/Python/AIExcavator/src/ui.py", line 75, in <module>
uier.inter()
File "D:/Projects/Python/AIExcavator/src/ui.py", line 63, in inter
tr.filler(l, tr2)
File "D:\Projects\Python\AIExcavator\src\Backtracking.py", line 79, in filler
self.filler(lista[:nr], tree.left)
File "D:\Projects\Python\AIExcavator\src\Backtracking.py", line 78, in filler
tree.data = lista[nr]
AttributeError: 'NoneType' object has no attribute 'data'
filler
无论如何都有点奇怪,因为它只需要self
来进行递归调用。它实际上是一个替代构造函数,使它更适合作为类方法,类似于使用类方法的好处是可以定义
^{pr2}$Tree
的子类,而不必重新定义from_list
。考虑尽管},因为您使用了
BackwardsTree.from_list
解析为Tree.from_list
,因为您没有重写该函数,但返回值仍将是BackwardsTree
的实例,而不是{cls
来创建每个(子)树,而不是在方法内部对Tree
进行硬编码。在你写的
但是在filler中,你不用tr2,因为你用一个新的树对象来删除它。在
^{pr2}$而且,正如评论中指出的
错误,因为您传递了}需要一个}。在
tree.left
和tree.right
,它们都是None
,而{tree
对象,而不是{关于通过引用传递,您应该阅读Python中的mutables。TL;DR:如果您将
tr2
传递给filler
,并在filler
中修改它,它确实会被修改。在相关问题 更多 >
编程相关推荐