python - 二叉树Python - AttributeError:'NoneType'对象没有属性'left'
问题描述
我正在尝试将元素添加到二叉树并预先打印它们。
添加到二叉树的元素是节点类型。
添加元素时出现错误:
AttributeError: 'NoneType' object has no attribute 'left'
请让我知道我必须在哪里进行更改以下是代码:
class Node(object):
def __init__(self, item, left=None, right=None):
self.item = item
self.left = None
self.right = None
def __repr__(self):
return '{}'.format(self.item)
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
def add(self, value):
val = self.root
if not val:
val = value
elif not val.left:
val = value
elif not val.right:
val = value
else:
self.left = val.left.add(value)
return val
def preorder(self):
val = self.root
print(val)
if val.left:
val.left.preorder()
if val.right:
val.right.preorder()
def main():
binary_tree = BinaryTree()
print("Adding nodes in tree")
for i in range(1, 11):
node = Node(i)
binary_tree.add(node)
print("Printing preorder...")
binary_tree.preorder()
if __name__ == '__main__':
main()
错误:
Adding nodes in tree
Printing preorder...
None
Traceback (most recent call last):
File ".\binary_tree_test5.py", line 52, in <module>
main()
File ".\binary_tree_test5.py", line 49, in main
binary_tree.preorder()
File ".\binary_tree_test5.py", line 33, in preorder
if val.left:
AttributeError: 'NoneType' object has no attribute 'left'
解决方案
- 在您的代码中,当您的根节点为空时就是这种情况。
- 您可以通过检查根值来防止这种情况。
def preorder(self):
val = self.root
if not val: # this will handle the case when root node is None.
return
print(val)
if val.left:
val.left.preorder()
if val.right:
val.right.preorder()
PS:我认为你的add
方法是错误的。您可以针对任何其他问题调试该部分。
推荐阅读
- javascript - 四舍五入到最接近的 N 因子
- scala - 如何使用正则表达式 scala spark 验证地址
- javascript - Ionic - 从图像中获取 RGB 值
- java - 在 HashMap 中使用 ComputeIfAbsent
- r - R Shiny Dplyr - 提取条件,重复查询数据库并创建仪表板
- ssas-tabular - 在表级别自动刷新 SSAS 表格模型
- vb.net - 是否可以让 CStr 抛出异常?
- mysql - 复杂的 JPQL 查询返回 0 零结果在查询中两次获取表
- ms-access - 访问 VBA .seek 方法,得到运行时错误“438”,或找不到方法或数据成员
- postgresql - postgresql 两阶段提交准备事务错误:事务不能在 PL/pgSQL 中启动