我是编程新手,正在尝试在Python中计算二叉树的深度。我认为我的错误是因为深度是Node类的一个方法而不是常规函数。我想学习面向对象编程,并希望使用一个方法。这可能是初学者的错误......以下是我的代码:
class Node:
def __init__(self, item, left=None, right=None):
"""(Node, object, Node, Node) -> NoneType
Initialize this node to store item and have children left and right.
"""
self.item = item
self.left = left
self.right = right
def depth(self):
if self.left == None and self.right == None:
return 1
return max(depth(self.left), depth(self.right)) + 1
i receive this error:
>>>b = Node(100)
>>>b.depth()
1
>>>a = Node(1, Node(2), Node(3))
>>>a.depth()
Traceback (most recent call last):
File "C:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "C:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 15, in depth
builtins.NameError: global name 'depth' is not defined
new bee
应该拼作newbie
,如果我没记错的话。 - Snakes and Coffeedepth()
作为方法调用解决了问题),但还不完整。解释为什么您无法从内部访问该方法,而使用常规函数可以的根本原因是Python中作用域和类定义如何工作的某些细节。当您调用常规模块级函数时,其“全局”作用域将是包含此函数的模块。但是,在创建类型对象后,可以认为定义方法的作用域已被丢弃。 - millimooseself.left is None
而不是self.left == None
。这可以保护你免受糟糕设计的类的影响,并提高性能,但真正的原因是"is None"是Pythonic的一种方式,使有经验的Python程序员更容易读懂你的代码。 - abarnert