Дано дерево (необязательно бинарное) и номер уровня. Вывести список вершин, находящихся на данном уровне - Lisp

Узнай цену своей работы

Формулировка задачи:

Дано дерево (необязательно бинарное) и номер уровня. Вывести список вершин, находящихся на данном уровне. Помогите решить до завтра.

Решение задачи: «Дано дерево (необязательно бинарное) и номер уровня. Вывести список вершин, находящихся на данном уровне»

textual
Листинг программы
(defun task (tree lv)
  (cond ((null tree) nil)
        ((zerop lv) (list (car tree)))
        (t (apply 'append (mapcar (lambda (x) (task x (- lv 1))) (cdr tree))))))
 
==> TASK
 
(task '(1 (5 (6) (7) (8))) 1) 
 
==> (5)
 
(task '(1 (5 (6) (7) (8))) 2) 
 
==> (6 7 8)
 
(task '(1 (5 (6) (7 (a) (b)) (8))) 3) 
 
==> (A B)

Объяснение кода листинга программы

В данном коде реализован рекурсивный функционал для обхода дерева и вывода его вершин на определенном уровне.

  1. defun определяет функцию с именем task, которая принимает два аргумента: tree и lv.
  2. В функции используется cond для проверки трех условий:
    • Если tree равно nil, то возвращается nil.
    • Если lv равно 0, то возвращается корень дерева (первый элемент в tree), который находится с помощью car.
    • Если lv не равно 0, то происходит рекурсивный вызов функции task для каждой ветви дерева (которые находятся в cdr), с аргументом lv-1. Значения этих рекурсивных вызовов объединяются с помощью apply и append.
  3. Функция вызывается с аргументами ('(1 (5 (6) (7) (8))) и 1. В результате возвращается корень дерева, который является первым элементом в tree, то есть число 5.
  4. Функция вызывается с аргументами ('(1 (5 (6) (7) (8))) и 2. В результате возвращается список [6 7 8], так как это вершины на втором уровне дерева.
  5. Функция вызывается с аргументами ('(1 (5 (6) (7 (a) (b)) (8))) и 3. В результате возвращается список [a b], так как это вершины на третьем уровне дерева.

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


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

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

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