Посетить каждый узел в следующем порядке - Lisp
Формулировка задачи:
Добрый день!помогите пожайлуста с примром на лиспи:
Дано случайное дерево.Надо посетить каждый узел в следующим порядки:
-посещаем прямого потомка 1;
-посещаем прямого потомка 2;
-.........................;
-посещаем прямого потомка n;
Другими словами слева на право,сверху вниз.
Решение задачи: «Посетить каждый узел в следующем порядке»
textual
Листинг программы
(defun travel-tree (tree) (cond ((null tree) nil) (t (cons (car tree) (apply 'append (mapcar #'travel-tree (cdr tree))))))) ==> TRAVEL-TREE (travel-tree '(r (1 (a) (b) (c)) (2 (d) (e) (f)) (3 (g) (h) (i)))) ==> (R 1 A B C 2 D E F 3 G H I)
Объяснение кода листинга программы
В коде определён функционал для обхода каждого узла дерева в определённом порядке, представленного в виде списка. Вот список описывающих пошагово действия, которые происходят в коде:
- В функции
travel-tree
определён условный операторcond
, который проверяет, является ли переданный аргументtree
равнымnil
. - Если
tree
равноnil
, то возвращаетсяnil
. - Если
tree
не равноnil
, то возвращается конкатенация двух значений: первого элементаtree
и результата рекурсивного вызова функцииtravel-tree
для остатка спискаtree
. - В начале функции
travel-tree
передаётся дерево в виде списка:(r (1 (a) (b) (c)) (2 (d) (e) (f)) (3 (g) (h) (i))
. - После вызова функции
travel-tree
с аргументомtree
, будет выполнен рекурсивный вызов для каждого элемента списка. - Для каждого элемента списка будет выполнен следующий набор действий:
- Первый элемент списка будет добавлен в начало результата.
- Результат рекурсивного вызова функции
travel-tree
для оставшейся части списка будет присоединен к началу результата. - Результатом работы функции
travel-tree
для исходного списка будет(R 1 A B C 2 D E F 3 G H I)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д