Предположим, у меня есть данные, содержащие следующую информацию:Как восстановить двоичное дерево из кодировки пути?
(11, LL) (7, LLL) (8, R) (5,) (4, L) (13, RL) (2, LLR) (1, RRR) (4, RR)()
, в результате чего второе поле указывает путь от корневого узла, а пустое поле указывает корневой узел и() указывает конец данных.
Выходной сигнал будет levelorder: 5 4 8 11 13 4 7 2 1
Как можно реконструировать бинарное дерево? Обратите внимание, что существует вероятность того, что узел может отсутствовать. Например, LLL и L присутствуют, но ни один узел не соединяет их. В таком случае для их соединения должен быть создан узел с номером -1.
Что я до сих пор понял, это создать класс NodePath, который хранит данные и путь, например. NodePath (11, LL) как из строкового значения. Затем я повторяю каждый токен строки. Во время итерации я сравниваю длины пути и сохраняю их в LinkedList. . 11, LL -> 7, LLL и когда 8 приходит, тогда оно становится 8, R -> 11, LL -> 7, LLL
Теперь вот где я застреваю, потому что не знаю как дифференцировать LLL и LLR и как построить двоичное дерево соответственно. Боюсь, я бы поставил LLL и LLR на противоположные позиции.
У вас уже есть объект для моделирования узла дерева? – fge
Домашнее задание? По крайней мере, покажите ожидаемый результат. Интересно, конечно. –
Ну, вставьте любые недостающие узлы на свой путь к узлу, который вы вставляете. Автоматически вставленные узлы получают значение по умолчанию. –