Количество всех вершин данного дерева заданной высоты - Lisp

Узнай цену своей работы

Формулировка задачи:

Определите функцию, подсчитывающую количество всех вершин данного дерева заданной высоты. Как это сделать?

Решение задачи: «Количество всех вершин данного дерева заданной высоты»

textual
Листинг программы
  1. (defun tree-count (tree lv)
  2.   (cond ((null tree) 0)
  3.         ((zerop lv) 1)
  4.         (t (+ (tree-count (car tree) (- lv 1))
  5.               (tree-count (caddr tree) (- lv 1))))))
  6.  
  7. ==> tree-count
  8.  
  9. (tree-count '(((nil 2 nil) 6 (nil -8 nil)) 7 (nil 12 nil)) 1)
  10.  
  11. ==> 2
  12.  
  13. (tree-count '(((nil 2 nil) 6 (nil -8 nil)) 7 (nil 12 nil)) 2)
  14.  
  15. ==> 2
  16.  
  17. (tree-count '(((nil 2 nil) 6 (nil -8 nil)) 7 (nil 12 nil)) 3)
  18.  
  19. ==> 0

Объяснение кода листинга программы

В данном коде определен вспомогательный элементарный рекурсивный функционал для подсчета количества вершин в данном дереве с заданной высотой. Функция tree-count принимает два аргумента: tree — кортеж, представляющий собой вершину дерева, и lv — номер текущей вершины дерева. В данном коде реализованы следующие условия:

  1. Если дерево пустое, то возвращается 0.
  2. Если номер вершины равен нулю, то возвращается 1.
  3. В противном случае, рекурсивно вызывается функция tree-count для двух дочерних вершин (car и cadr tree), значение lv уменьшается на 1, и результат рекурсивного вызова суммируется с текущим значением lv. Таким образом, данный код рекурсивно обходит все вершины дерева и подсчитывает количество вершин с заданной высотой. Например, для данного дерева: ((nil 2 nil) 6 (nil -8 nil)) и lv=1, функция вернет 2, так как есть две вершины с высотой 1 (nil 2 nil и (nil 2 nil)). А для данного дерева: ((nil 2 nil) 6 (nil -8 nil)) и lv=2, функция вернет 2, так как есть две вершины с высотой 2 (nil 2 nil и (nil 2 nil)). А для данного дерева: ((nil 2 nil) 6 (nil -8 nil)) и lv=3, функция вернет 0, так как нет вершин с высотой 3.

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


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

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

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы