二叉树Python-AttributeError:';非类型';对象没有属性';左';
我正在尝试将元素添加到二叉树中,并按预定顺序打印它们 添加到二叉树的元素的类型为node 我在添加元素时出错:二叉树Python-AttributeError:';非类型';对象没有属性';左';,python,binary-tree,Python,Binary Tree,我正在尝试将元素添加到二叉树中,并按预定顺序打印它们 添加到二叉树的元素的类型为node 我在添加元素时出错: AttributeError:'NoneType'对象没有属性'left' 请让我知道我在哪里需要改变 代码如下: class Node(object): def __init__(self, item, left=None, right=None): self.item = item self.left = None self
AttributeError:'NoneType'对象没有属性'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'
在树中添加节点
打印预订单。。。
没有一个
回溯(最近一次呼叫最后一次):
文件“\binary\u tree\u test5.py”,第52行,在
main()
文件“\binary\u tree\u test5.py”,第49行,主目录
二叉树.预序()
文件“\binary\u tree\u test5.py”,第33行,预排序
如果val.left:
AttributeError:“非类型”对象没有属性“左”
- 在您的代码中,根节点为null时就是这种情况
- 可以通过检查根值来防止这种情况
def预订单(self):
val=self.root
如果不是val:#这将处理根节点为None的情况。
返回
打印(val)
如果val.left:
val.left.preorder()
如果val.right:
val.right.preorder()
PS:我认为你的
add
方法是错误的。您可以调试该部分以解决任何其他问题。binary\u tree=BinaryTree()
-BinaryTree。
根参数的默认参数为None
。当您添加一个节点
并检查根节点时,如果它没有根节点,您应该创建一个
....
def add(self, value):
val = self.root
if not val:
self.root = value
val = value
...
或
这将解决根为None
的问题,只要在执行任何其他操作之前在空树上调用add
如果你想保持创建空树的选项,你可以考虑不支持无根树的方法。
class RootLessException(Exception):
pass
...
...
def preorder(self):
if not self.root:
raise RootLessException
val = self.root
...
请添加完整回溯以帮助调试错误。仅添加错误类型没有帮助。add()
如何将节点添加到树中?@Poojan-添加了完整的回溯我正在尝试实现一个二叉树,而不是二叉搜索树,并将一个节点类型的对象传递到二叉树中供您输入,是的,实际上add方法不起作用-打印时它只显示第一个元素。我应该发布一个不同的问题,还是编辑这个问题?
class RootLessException(Exception):
pass
...
...
def preorder(self):
if not self.root:
raise RootLessException
val = self.root
...