【发布时间】:2019-12-16 16:48:12
【问题描述】:
我正在下面编写此代码,但是当我尝试调用函数 size() 时,它会抛出错误
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
def insert(self,data):
if self.data:
if data<self.data:
if self.left is None:
self.left=Node(data)
else:
self.left.insert(data)
else:
if self.right is None:
self.right=Node(data)
else:
self.right.insert(data)
else:
self.data=data
def size(node):
if node is None:
return 0
else:
return (size(node.left)+ 1 + size(node.right))
root=Node(4)
root.insert(5)
root.insert(3)
root.insert(8)
print(size(root))
下面的错误被抛出:
NameError Traceback (most recent call last)
<ipython-input-7-8c72ba7719dc> in <module>
41 root.insert(8)
42
---> 43 print(size(root))
44
45 #root.print()
NameError: name 'size' is not defined
【问题讨论】:
-
没错,
size未在此上下文中定义。它是在Node类中定义的,不过 -
快速警告:如果你的树可以任意增长(接近或超过一千个节点深度),你将会遇到
RecursionErrors。如果这永远不会发生,请忽略我,但如果可能,您需要在不使用递归的情况下重写它。 -
@Roope:不要认为这真的涵盖了 OP 的问题。如所写,通常称为
self的方法的参数改为命名node,但这是无害的。问题是尝试做size(SOMENODE),当他们以只有SOMENODE.size()有效的方式定义方法时;size不应该在类体内缩进,或者它需要作为方法调用,而不是顶级函数。
标签: python python-3.x