Python Проблема свойства двоичного дерева в классе - PullRequest
0 голосов
/ 28 мая 2020

Я получаю сообщение об ошибке: Traceback (последний вызов последним): файл «...», строка 36, в root .data.append («L») AttributeError: объект 'Node' не имеет атрибута 'data'

Но у меня явно есть свойство данных в моем классе?

class Node:
    def _init_(self):
        self.left = None
        self.right = None
        self.data = list()

def addPerson(root, person):
    if person < root.data[0]:
        if root.left == None:
            root.left = Node()
            root.left.data.append(person)
        else:
            addPerson(root.left,person)
    else:
        if person > root.data[0]:
            if root.right == None:
                root.right = Node()
                root.right.data.append(person)
            else:
                addPerson(root.right,person)
        else:
            root.data.append(person)

def printPerson(root):
    if root == None:
        return
    print(root.data)
    printPerson(root.left)
    printPerson(root.right)

root = Node()
root.data.append("L")

for i in range(0,6):
    addPerson(root, input("Add Person: "))

print("Left side of room A-K: ")
printPerson(root.left)
print("Right side of room L-Z: ")
printPerson(root.right)

1 Ответ

1 голос
/ 28 мая 2020

Неверное название метода инициализации, должно быть __init__. Эти методы magi c часто называют «dunders», потому что они начинаются и заканчиваются двойным подчеркиванием. Измените определение класса Node на это:

class Node:
    def __init__(self):
        self.left = None
        self.right = None
        self.data = list()

https://docs.python.org/3/reference/datamodel.html#special -method-names

...