Определить функцию 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