Определить функцию 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 показывают, что она корректно определяет глубину вложенности списков. Код функции:

  1. (defun depth-tree (tree)
  2. `  (cond ((atom tree) 0)
  3. `   (t (max (+ 1 (depth-tree (car tree)))
  4.     (+ 1 (depth-tree (cdr tree))))))
  5. ==> depth-tree
  6. (depth-tree '(A.B))
  7. ==> 1
  8. (depth-tree '((A.B).(C.D))
  9. ==> 2

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


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

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

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