Функция для нахождения среднего арифметического листьевых вершин дерева - Lisp

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

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

Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)» с числами в качестве вершин. Определить функцию для нахождения среднего арифметического листьевых вершин этого дерева. Например: если дано "(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))", ответом будет "3".

Решение задачи: «Функция для нахождения среднего арифметического листьевых вершин дерева»

textual
Листинг программы
  1. (defun sum-tree (tree)
  2.   (cond ((null tree) 0)
  3.         ((and (null (car tree)) (null (caddr tree))) (cadr tree))
  4.         (t (+ (sum-tree (car tree)) (sum-tree (caddr tree))))))
  5.  
  6. ==> sum-tree
  7.  
  8. (sum-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
  9.  
  10. ==> 18
  11.  
  12. (defun num-tree (tree)
  13.   (cond ((null tree) 0)
  14.         ((and (null (car tree)) (null (caddr tree))) 1)
  15.         (t (+ (num-tree (car tree)) (num-tree (caddr tree))))))
  16.  
  17. ==> num-tree
  18.  
  19. (num-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
  20.  
  21. ==> 3
  22.  
  23. (avg-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
  24.  
  25. ==> 6

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

Функция sum-tree принимает в качестве аргумента дерево, и возвращает сумму значений всех вершин дерева. Функция num-tree принимает в качестве аргумента дерево, и возвращает количество вершин дерева. Функция avg-tree принимает в качестве аргумента дерево, и возвращает среднее арифметическое значений всех вершин дерева. В данном примере:

  1. sum-tree вызывает функцию sum-tree с аргументом (((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))
  2. num-tree вызывает функцию num-tree с аргументом (((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))
  3. avg-tree вызывает функцию avg-tree с аргументом (((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))) Поскольку функция sum-tree рекурсивно обходит все вершины дерева, она может быть использована для вычисления суммы значений всех вершин. Поскольку функция num-tree рекурсивно обходит все вершины дерева, она может быть использована для подсчета количества вершин дерева. Поскольку функция avg-tree вычисляет среднее арифметическое значений всех вершин дерева, она может быть использована для вычисления среднего значения.

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


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

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

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

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

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

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