Я пытаюсь создать дерево из плоского списка. Мне нужно определить функцию под названием tree_from_flat_list
. Для любого узла в позиции индекса i
левый ребенок сохраняется в позиции индекса 2*i
, а правый ребенок хранится в позиции индекса 2*i+1
. :Создание двоичного дерева
class BinaryTree:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def get_left(self):
return self.left
def get_right(self):
return self.right
def set_left(self, tree):
self.left = tree
def set_right(self, tree):
self.right = tree
def set_data(self, data):
self.data = data
def get_data(self):
return self.data
def create_string(self, spaces):
info = ' ' * spaces + str(self.data)
if self.left != None:
info += '\n(l)' + self.left.create_string(spaces+4)
if not self.right == None:
info += '\n(r)' + self.right.create_string(spaces+4)
return info
def __str__(self):
representation = self.create_string(0)
return representation
def tree_from_flat_list(node_list):
if node_list != None:
root_index = 1
list1 = []
list2 = []
root = node_list[root_index]
left_sub_tree = list1.append(node_list[2*root_index])
right_sub_tree = list2.append(node_list[2*root_index+1])
tree = BinaryTree(root)
tree.set_left(tree_from_flat_list(left_sub_tree))
tree.set_right(tree_from_flat_list(right_sub_tree))
return tree
При попытке запуска этого:
def test():
flat_list = [None, 10, 5, 15, None, None, 11, 22]
my_tree = tree_from_flat_list(flat_list)
print(my_tree)
test()
я должен получить вывод:
10
(l) 5
(r) 15
(l) 11
(r) 22
Edit: все еще застряли на том, что я должен делать для этой функции. Любая помощь по-прежнему ценится.
Количество промежутков между ними - высота дерева, а l
и r
представляют, если они являются левым ребенком или правым ребенком. Это будет выглядеть так:
10
/\
5 15
/\
11 22
, но вместо этого я только получаю:
10
Как я должен изменить свою tree_from_flat_list
функцию так, что это работает. Любая помощь приветствуется. Спасибо.
Можете ли вы добавить некоторую информацию (в текстовом формате) о том, как дерево должно быть построено из списка? – L3viathan
Прошу прощения, я забыл добавить эту информацию. –
Можете ли вы объяснить, что именно должен представлять ваш печатный результат? Что такое структура двоичного дерева, которое должно быть сделано из '[None, 10, 5, 15, None, None, 11, 22]'? Я мог бы начать делать предположения, но было бы лучше, если бы вы только указали это с самого начала. –