Деревья. Вычислить среднее арифметическое всех элементов - 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 и выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д