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

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

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

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

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

textual
Листинг программы
(defun sum-tree (tree)
  (cond ((null tree) 0)
        ((and (null (car tree)) (null (caddr tree))) (cadr tree))
        (t (+ (sum-tree (car tree)) (sum-tree (caddr tree))))))
 
==> sum-tree
 
(sum-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
 
==> 18
 
(defun num-tree (tree)
  (cond ((null tree) 0)
        ((and (null (car tree)) (null (caddr tree))) 1)
        (t (+ (num-tree (car tree)) (num-tree (caddr tree))))))
 
==> num-tree
 
(num-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
 
==> 3
 
(avg-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil))))
 
==> 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
Похожие ответы