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