Добрый вечер! составляю бинарное дерево. Есть запись, содержащая название команды, фамилию игрока и сколько очков он забил. Таких записей за игру может быть несколько, потому как один и тот же игрок может забить несколько очков. Нужно составить бинарное дерево, упорядоченное в алфавитном порядке, и при его реализации одновременно подсчитывать количество очков, забитых одним игроком. я хочу брать первый элемент , загонять его в корень, потом брать следующий, сравнивать с корнем , если равны, суммировать очки , если нет, то определять его положение в дереве. Не могу понять, как мне , если я нахожусь уже где-то в середине дерева, вернуться и сравнивать с вершиной новую запись... Не хватает небольшого приложения силы в чуть -чуть пониже спины . Окажите, если сможете.)))
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);
я ввожу информацию из файла она у меня там уже забита... там прикрепила файл, нужны 2 первые процедуры... занимаюсь плагиатом, нашла у вас на форуме, вот как переделать, чтоб подсчитывал очки?
нужно упорядочивать по фамилии игроков . идея в принципе понятна, просто как это реализовать с подсчетом, просто потому нужно в виде списка представить 10 самых результативных игроков, надо ж где-то будет инфихранить , кто сколько забил...
Прикрепленные файлы
_TREE.PAS ( 19.58 килобайт )
Кол-во скачиваний: 233