) (язык-с++)
Другие языки программирования и технологии
как построить бинарное дерево
дан файл (все данные вводятся непосредственно в нем), как построить бинарное дерево обращаясь к этому файлу, где в корне находится: в одном листке: и так далее (в файле находится
1
2
3
) (язык-с++)
) (язык-с++)
Первое, что необходимо для построения B-дерева, это бинарное условие, то есть такое условие, которое позволяет отправить входное данное по одному из двух направлений (оба направления определены однозначно и взаимоисключающе. Например, вверх/вниз, да/нет, направо/налево и т. п). Важное замечание: данные могут быть уже присутствующими в дереве либо поступившими на вход дерева. Бинарное условие должно быть условием сравнения поступившего данного с присутствующим.
Совет: лучше описать функцию сравнения с двумя аргументами одного и того же типа. Функция должна возвращать значение из двух возможных.
Минимальным компонентом B-дерева является узел. Узел определяется как ячейка для единичного данного. Узел также содержит в себе две ссылки, каждая из которых типа «ссылка на узел». Важный запрет: ни одна из ссылок узла не может ссылаться на тот же узел, это недопустимо по природе B-дерева.
Желательно сохранять в любом узле номер его ЯРУСА. Номер яруса возрастает по мере удаления от корня дерева. Важный запрет: ни одна из ссылок узла не может ссылаться на узел с меньшим номером яруса, в противном случае в дереве возникает цикл, структура перестаёт быть деревом.
Память для каждого узла можно выделять в динамическом массиве (списке), это позволяет удлинять массив в процессе работы. Структура B-дерева строится отдельно.
Файл исходных данных должен представлять цепочку однородных элементов. При каждом обращении к файлу читается ровно один элемент. Дерево строится именно из таких элементов.
Алгоритмизация.
П. 1. Из файла читается очередной элемент. Если конец файла, то конец работы.
П. 2. Прочитанный элемент поступает на корень дерева.
П. 3а. Если дерева ещё нет, то элемент становится узлом в ярусе №0, обе ссылки инициализируются нулём. Возврат к п. 1.
П. 3б. Если дерево уже есть, то:
П. 3.1. Поступивший элемент (назовём его Eχ) сравнивается с элементом уже присутствующим в узле (назовём его E¡), для чего вызывается функция бинарного сравнения (назовем её φ{E¡, Eχ}).
П. 3.2а. Если Eχ совпадает с E¡, то возврат к п. 1.
П. 3.2б. По результату сравнения выбирается одна из двух ссылок хранящихся в узле.
П. 3.3а. Если выбранная ссылка указывает на занятый узел (занятый узел обозначается именем или значением хранимого в нём элемента (пусть будет Ez), то для узла Ez выполняется та же последовательность операций, начиная с п. 3.1.
П. 3.3б. Если выбрана нулевая ссылка, то выделяется память для нового элемента, а ссылке присваивается адрес этого элемента. Также определяется и сохраняется номер яруса нового узла. Обе ссылки вновь сформированного узла инициализируются нулём. Возврат к п. 1.
Пояснение к П. 3.2а.
Даже если в файле окажется несколько одинаковых элементов, все они учитываются как один. Бинарное дерево является бесповторным множеством.
Совет: лучше описать функцию сравнения с двумя аргументами одного и того же типа. Функция должна возвращать значение из двух возможных.
Минимальным компонентом B-дерева является узел. Узел определяется как ячейка для единичного данного. Узел также содержит в себе две ссылки, каждая из которых типа «ссылка на узел». Важный запрет: ни одна из ссылок узла не может ссылаться на тот же узел, это недопустимо по природе B-дерева.
Желательно сохранять в любом узле номер его ЯРУСА. Номер яруса возрастает по мере удаления от корня дерева. Важный запрет: ни одна из ссылок узла не может ссылаться на узел с меньшим номером яруса, в противном случае в дереве возникает цикл, структура перестаёт быть деревом.
Память для каждого узла можно выделять в динамическом массиве (списке), это позволяет удлинять массив в процессе работы. Структура B-дерева строится отдельно.
Файл исходных данных должен представлять цепочку однородных элементов. При каждом обращении к файлу читается ровно один элемент. Дерево строится именно из таких элементов.
Алгоритмизация.
П. 1. Из файла читается очередной элемент. Если конец файла, то конец работы.
П. 2. Прочитанный элемент поступает на корень дерева.
П. 3а. Если дерева ещё нет, то элемент становится узлом в ярусе №0, обе ссылки инициализируются нулём. Возврат к п. 1.
П. 3б. Если дерево уже есть, то:
П. 3.1. Поступивший элемент (назовём его Eχ) сравнивается с элементом уже присутствующим в узле (назовём его E¡), для чего вызывается функция бинарного сравнения (назовем её φ{E¡, Eχ}).
П. 3.2а. Если Eχ совпадает с E¡, то возврат к п. 1.
П. 3.2б. По результату сравнения выбирается одна из двух ссылок хранящихся в узле.
П. 3.3а. Если выбранная ссылка указывает на занятый узел (занятый узел обозначается именем или значением хранимого в нём элемента (пусть будет Ez), то для узла Ez выполняется та же последовательность операций, начиная с п. 3.1.
П. 3.3б. Если выбрана нулевая ссылка, то выделяется память для нового элемента, а ссылке присваивается адрес этого элемента. Также определяется и сохраняется номер яруса нового узла. Обе ссылки вновь сформированного узла инициализируются нулём. Возврат к п. 1.
Пояснение к П. 3.2а.
Даже если в файле окажется несколько одинаковых элементов, все они учитываются как один. Бинарное дерево является бесповторным множеством.
Похожие вопросы
- Бинарные деревья в алгоритме поиска слов
- Как создать бинарное дерево в c++ новичку(т.е. мне)???!Помогите плз!
- Построение бинарного дерева (С/С++)
- В какой книжке про С++ можно почитать о таких вещах, как структуры, бинарные деревья, красно-черные деревья? подскажите
- Вопрос по основам машинного кода и бинарного кода. Как это работает в своей основе?
- как устроен бинарный файл
- Научите меня составлять бинарные коды.На начальном уровне.Незнаю зачем просто очень хочется.
- чем отличается работа с бинарными файлами, от работы с обычными ???
- Работа с бинарными файлами. Народ, SOS. Нужна помощь
- Расшифруйте пожалуйста бинарный код (вроде как бинарный)
Обязательные свойства класса БИНАРНЫЙ УЗЕЛ:
• ЭЛЕМЕНТ
• ЯРУС
• две ССЫЛКИ, каждая на класс БИНАРНЫЙ УЗЕЛ.