Как построить двоичное дерево (не двоичное дерево поиска) из списка предзаказ в Python, используя только встроенный список? Каждый узел в списке предзаказ также имеет «флаг», который показывает, является ли он листом или внутренним узлом. И каждый узел имеет 2-х детей (Нет 0 или 1 ребенка)Построить полное двоичное дерево из списка обхода предварительного порядка Python
Я сделал класс для представления узла
class Node:
def __init__(self, initType):
self.type = initType
self.leftChild = None
self.rightChild = None
Я думаю, что я должен использовать stack
здесь, но я не хочу import
в stack
библиотека.
Решения, которые я нашел в Интернете, предназначены только для BST, или вход состоит из списка порядка и списка предварительных заказов, а не только списка предварительных заказов.
Не помогите? FWIW, вы можете использовать стандартный 'list' как стек LIFO: используйте метод' .append', чтобы вытащить элемент в список и метод '.pop', чтобы снова отменить его. –
Или вы можете пропустить весь класс Node и использовать математику индекса в упорядоченном списке, чтобы получить нужный узел. I.e. корневым узлом будет элемент 0, левый дочерний корень 1, правый дочерний корень 2, левый дочерний элемент элемента n - 2 * n + 1, правый дочерний элемент элемента n - 2 * n + 2. Если индекс ребенка больше чем размер списка, то этот ребенок не существует. –
Предзаказ здесь означает обход предварительного порядка, а не предварительно отсортированный список. – PTN