Итак, я только начал изучать мясо и картошку своей степени и изучаю 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] для альтернативных сторон.Однако, поскольку задание состояло в том, чтобы научиться использовать двоичное дерево, я хотел придерживаться ограничений урока