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

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

  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
Похожие ответы