Другие языки программирования и технологии

как построить бинарное дерево

дан файл (все данные вводятся непосредственно в нем), как построить бинарное дерево обращаясь к этому файлу, где в корне находится: в одном листке: и так далее (в файле находится







1
2
3


) (язык-с++)
Paha Brodaynko
Paha Brodaynko
160
Первое, что необходимо для построения 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а.
Даже если в файле окажется несколько одинаковых элементов, все они учитываются как один. Бинарное дерево является бесповторным множеством.
ЯЯ
Яяяяя Яяяя
16 172
Лучший ответ
Яяяяя Яяяя Тип бинарного узла удобно описать как класс, так как именно класс содержит конструктор. Конструктор узла будет вызван всякий раз при создании нового узла для выделения памяти для нового элемента. В конструкторе можно прописать инициализацию ссылок.

Обязательные свойства класса БИНАРНЫЙ УЗЕЛ:
• ЭЛЕМЕНТ
• ЯРУС
• две ССЫЛКИ, каждая на класс БИНАРНЫЙ УЗЕЛ.