(Python) Чередование входных данных из двоичного дерева? - PullRequest
0 голосов
/ 18 октября 2018

Итак, я только начал изучать мясо и картошку своей степени и изучаю Python.Одним из наших заданий на этой неделе было использование двоичного дерева и добавление гостей, позволяя дереву чередоваться слева и справа, а затем печатать имена гостей левого и правого прохода.

Наш профессор дал нам пример кода для работы, и я внес несколько изменений, чтобы он делал то, что хотел с ним.Вот что у меня есть:

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

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

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

print("Enter guest names for seating arrangements. (Max = 50)")
guestnumber = int(input("How many guests are attending?"))
root = Node()
root.data.append("Guest")
for i in range (0,guestnumber):
    guestadd (root, input("Name:"))

print("Left Aisle:")
printlist(root.left)
print("Right Aisle:")
printlist(root.right)

На первый взгляд, все работает так, как задумано, но я заметил, что мне дали непоследовательные результаты, когда он не разделил имена равномерно.Поспав на нем, я сделал еще несколько проблем и обнаружил, что, независимо от того, в каком порядке я размещаю данные, он всегда помещает 0-9, AG и несколько специальных символов в левом узле, и HZ, az,и еще несколько специальных символов на правой стороне.

Я уже передал то, что у меня есть, вместе с несколькими скриншотами моих открытий, так что я уверен, что мне дадут полную оценку, учитывая, что это вводный курс.Но меня беспокоит, что я не могу заставить его делать то, что я хочу постоянно.

Мое лучшее предположение состоит в том, что это как-то связано с тем, где находятся символы на графике ASCII.Все от 0-71 было слева, а 72-127 справа.Как бы я мог заставить свою программу обрабатывать строки именно так и не думать об этом в ASCII?

ПРИМЕЧАНИЕ. Если бы мне дали эту задачу для разделения гостей, я бы не использовал дерево.Вероятно, я бы использовал что-то, что просто добавляет имена в список, а затем использовал бы срез [:: 2] и [1 :: 2] для альтернативных сторон.Однако, поскольку задание состояло в том, чтобы научиться использовать двоичное дерево, я хотел придерживаться ограничений урока

1 Ответ

0 голосов
/ 18 октября 2018

В вашем коде ничего нет о чередовании слева и справа.Вы построили двоичное дерево search с "Гостем" в корне.Любой, чье имя стоит перед «Гостем» в юникод-лексикографическом порядке, идет слева, а любой, чье имя следует после «Гостя» в юникод-лексикографическом порядке, идет справа.

...