Добрый вечер! составляю бинарное дерево. Есть запись, содержащая название команды, фамилию игрока и сколько очков он забил. Таких записей за игру может быть несколько, потому как один и тот же игрок может забить несколько очков. Нужно составить бинарное дерево, упорядоченное в алфавитном порядке, и при его реализации одновременно подсчитывать количество очков, забитых одним игроком. я хочу брать первый элемент , загонять его в корень, потом брать следующий, сравнивать с корнем , если равны, суммировать очки , если нет, то определять его положение в дереве. Не могу понять, как мне , если я нахожусь уже где-то в середине дерева, вернуться и сравнивать с вершиной новую запись... Не хватает небольшого приложения силы в чуть -чуть пониже спины . Окажите, если сможете.)))
volvo
5.04.2006 1:25
Цитата
Нужно составить бинарное дерево, упорядоченное в алфавитном порядке, и при его реализации одновременно подсчитывать количество очков, забитых одним игроком.
Упорядочить в алфавитном порядке по какому признаку? По названию команды, или по по фамилии игрока?
Тут понимаешь в чем дело... Если ты хранишь в дереве фамилии игроков, то сколько бы раз он не забил за игру, в дереве все равно будет только одна запись, но вот число очков в ней будет увеличиваться... Я бы, по крайней мере, делал именно так... Что-то вот такого типа:
Type T = Record FIO: string; scores: integer; 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
5.04.2006 1:46
я ввожу информацию из файла она у меня там уже забита... там прикрепила файл, нужны 2 первые процедуры... занимаюсь плагиатом, нашла у вас на форуме, вот как переделать, чтоб подсчитывал очки?
нужно упорядочивать по фамилии игроков . идея в принципе понятна, просто как это реализовать с подсчетом, просто потому нужно в виде списка представить 10 самых результативных игроков, надо ж где-то будет инфихранить , кто сколько забил...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.