Построить бинарное дерево по заданным данным и найти самую старую ветку - Lisp
Формулировка задачи:
Всем привет. Спасибо всем за помощь с предыдущим заданием . Я познал много нового о лиспе. Что-то понял, что-то не полностью, но я стараюсь. У меня тут новое задание появилось, надеюсь сможете помочь .
Сразу к делу.
Допустим, что есть не пустое бинарное дерево Т, маркированное буквами латинского алфавита(маленькими (хотя для лиспа помоему все равно)). Нужно найти самую длинную ветку в этом дереве и составить слово из ветвлений начиная от листа.
Ввод:
Столбик строк заканчивающийся знаком конца файла (EOF), представляющий бинарное дерево.
Каждая строка заканчивается знаком новой линии (ascii 10) и содержит в себе:
1) Букву латинского алфавита (код ASCII от 97 до 122)
2) Знак отступа (ascii 32) то бишь пробел.
3) Последовательность поворотов на ветках дерева L - лево (ASCII 76), R - право(ASCII 82) ведущих к нужному ветвлению.
Вывод:
Составленное слово
Ограничения:
1) количество ветвлений не больше 10^7.
2) Высота дерева не больше 2^6
Лимиты:
Лимит времени O(n)
Лимита памяти O(n)
где n количество ветвлений.
Ну и пример:
Ввод:
a LL
d
a R
s L
Вывод:
asd
Конструкция дерева
d / \ s a / a
P.S. Две мои старые темы можно считать закрытыми.
Есть идея отсортировать сначала все строки и начать строить дерево с самого начала?
Решение задачи: «Построить бинарное дерево по заданным данным и найти самую старую ветку»
textual
Листинг программы
(defun tree-hash-table () (let ((table (make-hash-table))) (loop (let ( (value (read-char nil :eof)) (bla (read-char nil :eof)) (key (coerce (read-line nil :eof) 'list))) (when (not value) table) (setf (gethash key table) value)))))
Объяснение кода листинга программы
Выше представлен фрагмент кода на языке Lisp. Постараюсь рассказать, что в нём происходит:
- Создаётся новая функция
tree-hash-table
. - В функции используется цикл
loop
, который читает ввод пользователя (предположительно с клавиатуры). - В каждой итерации цикла считываются три значения:
value
,bla
иkey
. - Если
value
равноnil
, то на текущей итерации ничего не происходит. - Если
value
не равноnil
, то оно сохраняется в хеш-таблице с ключомkey
. - После завершения цикла выводится сообщение об ошибке, если в хеш-таблице не удалось найти значение.
- Функция возвращает значение, считанное на последней итерации цикла. Хеш-таблица — это структура данных, используемая для хранения пар «ключ: значение». В данном случае она используется для реализации ассоциативного массива. Если вы хотите более детально изучить код и понять, как он работает, то обратитесь к документации по используемым функциям.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д