Деревья. Вычислить среднее арифметическое всех элементов - Pascal ABC

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

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

В очередной задаче я впал в ступор, помогите кто нибудь с кодом. Вычислить среднее арифметическое всех элементов непустого двоичного дерева Т. Буду очень признателен за помощь!

Решение задачи: «Деревья. Вычислить среднее арифметическое всех элементов»

textual
Листинг программы
  1. program pr;
  2.  
  3. type
  4.   Pnode = ^node;
  5.   node = record
  6.     data: integer;
  7.     left, right: Pnode;
  8.   end;
  9.  
  10. var
  11.   tree: Pnode;
  12.   n, x, i, s: integer;
  13.   avg: real;
  14.  
  15. procedure addtotree(var tree: Pnode; x: integer);
  16. begin
  17.   if tree = nil then
  18.   begin
  19.     new(tree);
  20.     tree^.data := x;
  21.     tree^.left := nil;
  22.     tree^.right := nil;
  23.     exit;
  24.   end;
  25.   if x < tree^.data then
  26.     addtotree(tree^.left, x)
  27.   else addtotree(tree^.right, x);
  28. end;
  29.  
  30. procedure lkp(tree: Pnode);
  31. begin
  32.   if tree = nil then exit;
  33.   Lkp(Tree^.left);
  34.   write('  ', Tree^.data);
  35.   Lkp(Tree^.right);
  36. end;
  37.  
  38. procedure summ(tree: pnode; var sum: integer);
  39. begin
  40.   if tree <> nil then begin
  41.     sum := sum + tree^.data;
  42.     summ(tree^.left, sum);
  43.     summ(tree^.right, sum);
  44.   end;
  45. end;
  46.  
  47. procedure DeleteTree(var Tree1: PNode );
  48. begin
  49.   if Tree1 <> nil then
  50.   begin
  51.     DeleteTree(Tree1^.LEFT);
  52.     DeleteTree(Tree1^.RIGHT);
  53.     Dispose(Tree1);
  54.   end;
  55. end;
  56.  
  57. begin
  58.   writeln('Введите количетво элементов');
  59.   readln(n);
  60.   for i := 1 to n do
  61.   begin
  62.     x := random(21);
  63.     addtotree(tree, x);
  64.   end;
  65.   lkp(tree);
  66.   writeln;
  67.   writeln;
  68.   s := 0;
  69.   summ(tree, s);
  70.   writeln;
  71.   avg := s / n;
  72.   writeln('Среднее арифметическое элементов двоичного дерева: ', avg);
  73. end.

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

  1. В программе объявлены переменные: n, x, i, s, avg (тип real), tree (тип Pnode), и переменные-ссылки left и right для каждого узла tree.
  2. Создается узел tree, если он еще не был создан. Для этого используется оператор new. Значение x присваивается полю data узла tree. Узлы left и right присваиваются значение nil.
  3. Если значение x меньше значения поля data узла tree, то вызывается функция addtotree, которая добавляет узел x в левое поддерево. Если значение x больше или равно значению поля data узла tree, то вызывается функция addtotree для правого поддерева.
  4. Функция lkp просматривает дерево слева от текущего узла (если он не равен nil), затем выводит значение поля data текущего узла.
  5. Функция summ суммирует значения полей data всех узлов в дереве и вызывает рекурсивно функции summ для левого и правого поддеревьев.
  6. Функция DeleteTree удаляет все узлы из дерева, вызывая рекурсивно функции DeleteTree для левого и правого поддеревьев.
  7. В цикле вводится количество элементов n. Для каждого элемента вводится случайное число x. Затем вызывается функция addtotree, чтобы добавить узел x в дерево.
  8. После ввода всех элементов вызывается функция lkp, чтобы вывести дерево.
  9. Затем вызывается функция summ, чтобы вычислить сумму значений полей data всех узлов в дереве.
  10. Наконец, вычисляется среднее арифметическое s / n и выводится на экран.

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


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

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

13   голосов , оценка 3.769 из 5

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

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

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