Построить бинарное дерево по заданным данным и найти самую старую ветку - 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. Постараюсь рассказать, что в нём происходит:

  1. Создаётся новая функция tree-hash-table.
  2. В функции используется цикл loop, который читает ввод пользователя (предположительно с клавиатуры).
  3. В каждой итерации цикла считываются три значения: value, bla и key.
  4. Если value равно nil, то на текущей итерации ничего не происходит.
  5. Если value не равно nil, то оно сохраняется в хеш-таблице с ключом key.
  6. После завершения цикла выводится сообщение об ошибке, если в хеш-таблице не удалось найти значение.
  7. Функция возвращает значение, считанное на последней итерации цикла. Хеш-таблица — это структура данных, используемая для хранения пар «ключ: значение». В данном случае она используется для реализации ассоциативного массива. Если вы хотите более детально изучить код и понять, как он работает, то обратитесь к документации по используемым функциям.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы