01. Бинарные деревья

Бинарные деревья

Бинарные деревья в чем-то похожи на бинарный поиск в отсортированном массиве, только применяется на этапе создания этой структуры данных.
По сути это «двунаправленные списки, адаптированные для алгоритма бинарного поиска».

Ключевым для классического бинарного дерева является наличие уникальных идентификаторов/индексов/хеш сумм и тд. Которые можно сравнивать, за счет этого можно двигаться по дереву.

Прародитель (Data1) называется корнем дерева, в бинарном дереве каждый родитель может иметь до 2 наследников, если наследников нет т.е. указатели равны nullptr (как у нижних кружков), то такие объекты называются листьями.

Рассмотрим пример:
Мы сформировали дерево на основе уникальных/неповторяющихся данных или например расчета контрольных/хеш сумм (данные попадали не сортированные)

Есть некоторый абстрактный индекс/идентификатор с названием Data, который также соответствует интересующим нам данным/классу/ссылке на нужные данные и тд.
Пусть Data1 равен 10, а мы хотим попасть и получить данные из идентификатора DataN равного 40, Data2=5, а Data3=15.

Data1 является корнем дерева, и мы двигаемся из него.
По правилам бинарных деревьев то, что находится слева меньше текущего ID, а то что справа больше, поэтому ветка с Data2 и его наследниками (в данном случае листьями т.к. не имеют продолжения) сразу отпадает, переходим вправо, в Data3.
Data3 и имеет левого и правого наследника, также DataN> Data3, поэтому опять идем по правой ветке, а левая отпадает, в результате мы приходим в DataN.

Бинарное дерево является по сути рекурсивной структурой, поэтому нужно знать корень дерева и в ряде случаев использовать рекурсивные алгоритмы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *