Деревья. Вычислить среднее арифметическое всех элементов - 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 и выводится на экран.