AttributeError:“ int”对象没有属性“ data”

时间:2019-06-11 20:42:56

标签: python-3.x

我试图在Python3.7中实现二进制搜索树的一些基本操作。我刚开始从Hackerrank编码问题,并且在BST中实现levelOrder遍历时陷入困境。我应该怎么解决这个AttributeError:'int'对象没有属性'data'?

我正在使用队列来解决此问题,最初,队列将指向根节点,然后检查左右子节点。如果找到,则子代将追加到队列,并且过程继续进行,直到队列为空。我在每次迭代中弹出第一个元素,并将其存储在temp变量中。这样,我将在树的每个级别上获得节点。

class Node:
    def __init__(self, data):
        self.data = data
        self.leftChild = None
        self.rightChild = None

    def insert(self, data):
        if self.data is not None:
            if data < self.data:
                if self.leftChild is None:
                    self.leftChild = Node(data)
                else:
                    self.leftChild.insert(data)
            elif data > self.data:
                if self.rightChild is None:
                    self.rightChild = Node(data)
                else:
                    self.rightChild.insert(data)
        else:
            self.data = data

    def traverseLevelOrder(self):
        queue = []
        queue.append(self.data)
        while queue:
            # Print front of queue and remove it from queue
            print(queue[0].data)
            temp = queue.pop(0)

            # Enqueue left child
            if temp.leftChild is not None:
                queue.append(temp.leftChild)

            # Enqueue right child
            if temp.rightChild is not None:
                queue.append(temp.rightChild)


class BST:
    def __init__(self):
        self.rootNode = None

    def insert(self, data):
        if self.rootNode is None:
            self.rootNode = Node(data)
        else:
            self.rootNode.insert(data)

    def traverseLevelOrder(self):
        if self.rootNode is None:
            return
        else:
            self.rootNode.traverseLevelOrder()


bst = BST()
bst.insert(2)
bst.insert(4)
bst.insert(1)
bst.insert(3)
bst.traverseLevelOrder()

代码应返回如下所示的级别遍历顺序(在级别内,应首先打印左节点,然后打印右节点):

2
1
4
3

相反,我遇到了以下错误:

Traceback (most recent call last):
    print(queue[0].data)
AttributeError: 'int' object has no attribute 'data'

2 个答案:

答案 0 :(得分:0)

您要在队列中附加一个整数self.data,然后尝试使用queue[0].data访问该整数上的属性,从而引发AttributeError

相反,将节点本身附加:

queue.append(self)

答案 1 :(得分:0)

queue.append(self.data)

您的意思是:

queue.append(self)

现在,您只向队列中添加一个数字,而不是整个对象。