我试图在Python3.7中实现二叉搜索树的一些基本操作。我刚从 Hackerrank 开始编码问题,在 BST 中实现 levelOrder 遍历时遇到了困难。我应该怎么做才能解决这个 AttributeError: 'int' object has no attribute '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'