Деревья. Вычислить среднее арифметическое всех элементов - Pascal ABC
Формулировка задачи:
В очередной задаче я впал в ступор, помогите кто нибудь с кодом.
Вычислить среднее арифметическое всех элементов непустого двоичного дерева Т.
Буду очень признателен за помощь!
Решение задачи: «Деревья. Вычислить среднее арифметическое всех элементов»
textual
Листинг программы
program pr; type Pnode = ^node; node = record data: integer; left, right: Pnode; end; var tree: Pnode; n, x, i, s: integer; avg: real; procedure addtotree(var tree: Pnode; x: integer); begin if tree = nil then begin new(tree); tree^.data := x; tree^.left := nil; tree^.right := nil; exit; end; if x < tree^.data then addtotree(tree^.left, x) else addtotree(tree^.right, x); end; procedure lkp(tree: Pnode); begin if tree = nil then exit; Lkp(Tree^.left); write(' ', Tree^.data); Lkp(Tree^.right); end; procedure summ(tree: pnode; var sum: integer); begin if tree <> nil then begin sum := sum + tree^.data; summ(tree^.left, sum); summ(tree^.right, sum); end; end; procedure DeleteTree(var Tree1: PNode ); begin if Tree1 <> nil then begin DeleteTree(Tree1^.LEFT); DeleteTree(Tree1^.RIGHT); Dispose(Tree1); end; end; begin writeln('Введите количетво элементов'); readln(n); for i := 1 to n do begin x := random(21); addtotree(tree, x); end; lkp(tree); writeln; writeln; s := 0; summ(tree, s); writeln; avg := s / n; writeln('Среднее арифметическое элементов двоичного дерева: ', avg); end.
Объяснение кода листинга программы
- В программе объявлены переменные: n, x, i, s, avg (тип real), tree (тип Pnode), и переменные-ссылки left и right для каждого узла tree.
- Создается узел tree, если он еще не был создан. Для этого используется оператор new. Значение x присваивается полю data узла tree. Узлы left и right присваиваются значение nil.
- Если значение x меньше значения поля data узла tree, то вызывается функция addtotree, которая добавляет узел x в левое поддерево. Если значение x больше или равно значению поля data узла tree, то вызывается функция addtotree для правого поддерева.
- Функция lkp просматривает дерево слева от текущего узла (если он не равен nil), затем выводит значение поля data текущего узла.
- Функция summ суммирует значения полей data всех узлов в дереве и вызывает рекурсивно функции summ для левого и правого поддеревьев.
- Функция DeleteTree удаляет все узлы из дерева, вызывая рекурсивно функции DeleteTree для левого и правого поддеревьев.
- В цикле вводится количество элементов n. Для каждого элемента вводится случайное число x. Затем вызывается функция addtotree, чтобы добавить узел x в дерево.
- После ввода всех элементов вызывается функция lkp, чтобы вывести дерево.
- Затем вызывается функция summ, чтобы вычислить сумму значений полей data всех узлов в дереве.
- Наконец, вычисляется среднее арифметическое s / n и выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д