这是我在python中创建BST的代码一切正常工作但是当我访问高度函数时它会给出错误,如“AttributeError:'NoneType'对象没有属性高度”我是新手在python中创建数据结构任何帮助都将适当的
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
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)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def print_tree(self):
if self.left:
self.left.print_tree()
print (self.data)
if self.right:
self.right.print_tree()
def height(self):
if self.data is None:
return 0
else:
return 1 + max(self.left.height(),self.right.height())
root = Node(8)
root.insert(3)
root.insert(10)
root.insert(1)
root.insert(6)
root.insert(4)
root.insert(7)
root.insert(14)
root.insert(13)
root.print_tree()
root.height()
答案 0 :(得分:1)
对于树中的叶节点,self.data
将设置为叶节点的值,但self.left
和self.right
将为None
。但即使在此之前,也可能存在左或右孩子为None
的节点,并且自从我们尝试该节点并获得其高度后,我们在AttributeError
上得到NoneType
。
在height
-
def height(self):
if self.data is None:
return 0
else:
return 1 + max(self.left.height(),self.right.height())
当递归到达节点时,left
或right
节点为None,上述代码将失败,因为它会尝试访问self.left.height()
或self.right.height()
,其中一个是无。
我们可以添加一个简单的检查,以查看self.left
或self.right
是否为None
,并根据它获取其中的高度。
答案 1 :(得分:0)
如果您收到类似错误,则表示您尝试使用None
的字段。因为你的树是有限的,你有一个没有任何数据的叶子。我发现您在代码中有一个位置self.data
字段已分配给值,但self.left
和self.right
没有。同时,您可以使用height
方法获取字段的值,只检查self.data
。这对我来说没有意义。
另外,我建议您尝试pdb
或其他调试工具。