我试图在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'
答案 0 :(得分:0)
您要在队列中附加一个整数self.data
,然后尝试使用queue[0].data
访问该整数上的属性,从而引发AttributeError
。
相反,将节点本身附加:
queue.append(self)
答案 1 :(得分:0)
queue.append(self.data)
您的意思是:
queue.append(self)
?
现在,您只向队列中添加一个数字,而不是整个对象。