#python #data-structures #binary-search-tree #typeerror
Вопрос:
Я пытаюсь создать BST, но когда я пытаюсь запустить программу, я получаю следующую ошибку:
TypeError: 'method' object is not iterable
Я не уверен, почему это происходит, так как я бы предположил, что метод in_order_traversal будет атрибутом класса BST. Ниже приведен мой код.
class BST:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
#
def add_child(self,data):
if data == self.data: #check if value already exists in tree
return
if data <self.data: #should go on the left side then
if self.left: #check if left tree has a value
self.left.add_child(data) #if it has a value, use add_child method to add another child to the left
else: #if it does not have a value
self.left = BST(data)
else:
if self.right:
self.right.add_child()
else:
self.right = BST(data) #if there is no right tree, init a new right tree with data
#visit left, root then right
def in_order_traversal(self):
elements = []
if self.left:
elements = self.left.in_order_traversal()
elements.append(self.data) #append the root
if self.right:
elements = self.right.in_order_traversal
return elements
def build_tree(data):
root = BST(data[0])
for i in range(1,len(data)):
root.add_child(data[i])
return root
if __name__ == '__main__':
numbers = [12,3,1,20]
numbers_tree = build_tree(numbers)
print(numbers_tree.in_order_traversal())
Комментарии:
1. Можете ли вы предоставить полную обратную связь?
Ответ №1:
def in_order_traversal(self):
elements = []
if self.left:
elements = self.left.in_order_traversal()
elements.append(self.data)
if self.right:
elements = self.right.in_order_traversal() #CHANGE
return elements
Вы на самом деле забыли написать скобки после in_order_traversal
метода, что вызвало ошибку.