2014-08-31 5 views
0

Я знаю, что этот вопрос может быть тривиальным по-своему, но я пытаюсь создать двоичное дерево из ввода уровня порядка, а затем пройти через него, чтобы представить, что дерево было сохранено в данных состав. Скажем, если на входе, как - [а, с, е, г, т, *, ш], он будет генерировать двоичный двоичное дерево следующего представления -Создание двоичного дерева из ввода порядка уровня

    a 
       /\ 
        s e 
       /\ /\ 
       r t * w 

Есть ли способ осуществить это, например, генерирование двоичного дерева из входного дерева. Если кто-то уже сталкивался с подобной проблемой раньше, пожалуйста, поделитесь какой-то реализацией в JAVA, например, с помощью Queues.

+0

Как вы узнаете, какие узлы принадлежат каждому уровню? потребуется какой-то разделитель. Или же дерево гарантировано завершено? Это было бы похоже на обратный поиск BFS, создавая дерево из списка вместо того, чтобы пересекать его. –

+0

Это предположение, что предоставленный String/List уже находится в грамматике порядка уровня, поэтому первый элемент String/List root, следующие два слева и справа соответственно и так далее. – NewBee

+0

Да, но что, если в одном поддереве нет всех его детей? –

ответ

1

Это приблизительная идея, но вы можете точно знать диапазон, который падает на заданный уровень.

Предположим, что текущий уровень содержит х не * элементов от i до i + k, тогда следующий уровень будет содержать 2x элемента от i + k + 1 до i + k + 2x, теперь возьмем два указателя один на i, а другой на i + k + 1 и назначить двум дочерним элементам каждый элемент * на текущем уровне слева направо.

Аналогично для следующего уровня подсчитывайте, сколько элементов содержит уровень, это число не * элементов. и повторить.