Помощь - Поиск - Пользователи - Календарь
Полная версия: Бинарное дерево
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
LOVE133
Добрый вечер! составляю бинарное дерево. Есть запись, содержащая название команды, фамилию игрока и сколько очков он забил. Таких записей за игру может быть несколько, потому как один и тот же игрок может забить несколько очков. Нужно составить бинарное дерево, упорядоченное в алфавитном порядке, и при его реализации одновременно подсчитывать количество очков, забитых одним игроком. я хочу брать первый элемент , загонять его в корень, потом брать следующий, сравнивать с корнем , если равны, суммировать очки , если нет, то определять его положение в дереве. Не могу понять, как мне , если я нахожусь уже где-то в середине дерева, вернуться и сравнивать с вершиной новую запись... Не хватает небольшого приложения силы в чуть -чуть пониже спины . Окажите, если сможете.)))
volvo
Цитата
Нужно составить бинарное дерево, упорядоченное в алфавитном порядке, и при его реализации одновременно подсчитывать количество очков, забитых одним игроком.

Упорядочить в алфавитном порядке по какому признаку? По названию команды, или по по фамилии игрока?

Тут понимаешь в чем дело... Если ты хранишь в дереве фамилии игроков, то сколько бы раз он не забил за игру, в дереве все равно будет только одна запись, но вот число очков в ней будет увеличиваться... Я бы, по крайней мере, делал именно так... Что-то вот такого типа:

Type
T = Record
FIO: string;
scores: integer;
End;

TTree = ^TNode;
TNode = Record
Data: T;
Left, Right: TTree;
End;

Procedure Add(Var T: TTree; FIO: String; score: Integer);
Procedure CreateNode(Var p: TTree);
Begin
New(p);
p^.Data.FIO := FIO;
p^.Data.scores := score;
p^.Left := nil; p^.Right := nil
End;

Begin
If T <> nil Then
With T^ Do Begin
If Data.FIO < FIO Then Add(Right, i)
Else
If Data.FIO > FIO Then Add(Left, i)
Else Data.scores := Data.scores + score { <-- Вот увеличение очков }
End
Else CreateNode(T)
End;

...
{ А добавлять - вот так: }
Add(Root, 'ivanov', 5);
Add(Root, 'petrov', 3);
Add(Root, 'ivanov', 2);

В результате - у Иванова будет 7 очков... (Программу не тестировал - набирал прямо здесь, только для иллюстрации идеи...)

Если у тебя другая стратегия - то приведи описание типа дерева, и то, как ты добавляешь в него информацию...
LOVE133
я ввожу информацию из файла она у меня там уже забита... там прикрепила файл, нужны 2 первые процедуры... занимаюсь плагиатом, нашла у вас на форуме, вот как переделать, чтоб подсчитывал очки?

нужно упорядочивать по фамилии игроков . идея в принципе понятна, просто как это реализовать с подсчетом, просто потому нужно в виде списка представить 10 самых результативных игроков, надо ж где-то будет инфихранить , кто сколько забил...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.