首页 > 解决方案 > 二叉树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'

标签: pythonbinary-tree

解决方案


  • 在您的代码中,当您的根节点为空时就是这种情况。
  • 您可以通过检查根值来防止这种情况。
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方法是错误的。您可以针对任何其他问题调试该部分。


推荐阅读