Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
4 / 4 / 3
Регистрация: 16.04.2010
Сообщений: 59
1

Вывести сумму значений всех листьев данного дерева

18.01.2012, 22:18. Показов 3063. Ответов 1
Метки нет (Все метки)

доброго всем времени суток)
дали нам опять задачи и все бы хорошо,но про бинарные деревья я ничего не знаю(
условие задачи такое:дан указатель Р1 на корень не пустого дерева. вывести сумму значений всех листьев данного дерева
я правильно поняла,что мне надо спуститься(или подняться) от корня к поддереву,затем к листьям и затем подсчитать их сумму?
если это так то подскажите как это делать
заранее спасибо))))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2012, 22:18
Ответы с готовыми решениями:

Вывести разность значений всех листьев бинарного дерева
Дан указатель P1 на корень непустого дерева. Вывести разность значений всех листьев данного...

Вывести элементы из всех листьев дерева
Здравствуйте, помогите пожалуйста с заданием по прологу, нужно вывести элементы из всех листьев...

Вычислить произведение всех отрицательных листьев дерева
подсчитать произведение всех отрицательных листьев дерева, заданного списком если кто знает как...

Turbo Prolog: подсчитать сумму всех вершин данного дерева, значения которых принадлежат заданному диапазону
Помогите,пожалуйста,кто в этом разбирается. Нужно создать предикат,подсчитывающий сумму всех вершин...

1
13067 / 5853 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
19.01.2012, 10:59 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Это через рекурсию надо делать. Если узел дерева определён так:
Pascal
1
2
3
4
5
6
7
8
type
  //Указатель на узел.
  TPNode = ^TNode;
  //Узел.
  TNode = record
    Data : Integer;
    PLeft, PRight : TPNode;
  end;
тогда функция подсчёта суммы значений листов будет выглядеть так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function CalcSum(const aPNode : TPNode) : Integer;
var
  Sum : Integer;
begin
  if aPNode = nil then begin
    CalcSum := 0;
    Exit;
  end;
  
  Sum := 0;
  
  //Если узел оказался листом, то берём его значение.
  if (aPNode^.PLeft = nil) and (aPNode^.PRight = nil) then
    Sum := aPNode^.Data
  //Если узел не является листом, то запускаем рекурсию по его веткам.
  else begin
    if aPNode^.PLeft <> nil then Sum := Sum + CalcSum(aPNode^.PLeft);
    if aPNode^.PRight <> nil then Sum := Sum + CalcSum(aPNode^.PRight);
  end;
  
  CalcSum := Sum;
end;
Часть вызывающей программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
var
  PTree : TPNode; //Корень дерева.
  Sum : Integer;
...
begin
...
  //Подсчёт суммы значений всех листьев дерева.
  Sum := CalcSum(PTree);
  Writeln('Сумма значений листьев дерева = ', Sum);
  //Процедура удаления дерева из памяти.
  TreeFree(PTree);
  
  Readln;
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2012, 10:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Составить программу вывода всех листьев бинарного дерева
У кого может есть готовая, поделитесь пожалуйста, буду очень благодарен. Добавлено через 23 часа...

Удаление из списка повторений и определение всех листьев дерева
Всем привет, я никак не могу разобраться с теми деревьями и списками. Кому не трудно помогите...

Вывод списка всех листьев бинарного дерева поиска
Нужно реализовать бинарное дерево поиска и вывести все его вершины, не имеющие потомков. Само...

Найти сумму листьев 2-ого дерева
function Kolvo(t:tree):integer; var k:integer; begin if t&lt;&gt;nil then begin if...

Функция, которая печатает элементы из всех листьев бинарного дерева
Написать функцию, которая печатает элементы из всех листьев дерева. Добавлено через 2 часа 26...

Вывести в том же порядке целые части всех чисел из данного набора, а также сумму всех целых частей.
Дан массив из N положительных действительных чисел. Вывести в том же порядке целые части всех чисел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.