我试图自学Python,来自C ++,所以我决定尝试构建一个简单的BST。我设法让我的插入方法正常工作,但我不知道为什么我的printTree方法失败。翻译给了我错误:
回溯(最近一次呼叫最后):文件" test.py",第40行,in printTree中的myTree.printTree()文件" test.py",第23行 printTree(self.left)NameError:全局名称' printTree'未定义
代码:
class Node(object):
def __init__(self, value):
self.value = value
self.left = self.right = None
def insert(self, node):
if self is None:
self = node
else:
if node.value <= self.value:
if self.left: insert(self.left, node)
else: self.left = node
else:
if self.right: insert(self.right, node)
else: self.right = node
def printTree(self):
if not self:
return
else:
printTree(self.left)
print(self.value)
printTree(self.right)
if __name__ == "__main__":
myTree = Node(3)
myTree.insert(Node(2))
myTree.insert(Node(4))
myTree.printTree()
我不能以这种方式传递当前实例吗?
答案 0 :(得分:2)
您对方法中printTree
的递归调用应为self.printTree()
。 Python到C ++的默认范围是不同的!
在C ++中,默认范围是当前对象(*this
),而在Python中并非如此。无论我们处理全局函数还是方法,默认(非限定)范围都是相同的。