Определить функцию TREE-DEPTH - Lisp
Формулировка задачи:
Определить функцию TREE-DEPTH, которая возвращает максимальную глубину бинарного дерева. Например,
>(TREE-DEPTH ‘(A.B)) 1 >(TREE-DEPTH ‘((A.B).(C.D))) 2
Решение задачи: «Определить функцию TREE-DEPTH»
textual
Листинг программы
(defun depth-tree (tree) (cond ((atom tree) 0) (t (max (+ 1 (depth-tree (car tree))) (+ 1 (depth-tree (cdr tree))))))) ==> depth-tree (depth-tree '(A.B)) ==> 1 (depth-tree '((A.B).(C.D))) ==> 2
Объяснение кода листинга программы
В данном коде определена функция с именем depth-tree
. Она принимает в качестве аргумента дерево, представленного в виде списка.
Если дерево является атомом (лишь один элемент), то функция возвращает 0.
В противном случае, функция рекурсивно вызывает саму себя для каждого элемента дерева (включая его самого), и возвращает максимальную глубину из всех этих вызовов.
Глубина дерева определяется как 1 плюс максимальная глубина его поддерева. Поддерево — это часть дерева, представленная в виде списка, начиная с любого его элемента, кроме первого.
Примеры использования функции depth-tree
показывают, что она корректно определяет глубину вложенности списков.
Код функции:
(defun depth-tree (tree)
- ` (cond ((atom tree) 0)
- ` (t (max (+ 1 (depth-tree (car tree)))
(+ 1 (depth-tree (cdr tree))))))
==> depth-tree
(depth-tree '(A.B))
==> 1
(depth-tree '((A.B).(C.D))
==> 2
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д