0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Статья расскажет о том, что такое<strong>бинарные деревья</strong>. Будут представлены способы их представления и основные термины. Отдельное внимание будет уделено B-дереву и его отличию от двоичных структур.</p>
1
<p>Статья расскажет о том, что такое<strong>бинарные деревья</strong>. Будут представлены способы их представления и основные термины. Отдельное внимание будет уделено B-дереву и его отличию от двоичных структур.</p>
2
<p><strong>Деревом</strong>называют структуру данных, которая имеет древовидный вид, то есть характеризуется наличием набора связанных узлов. Бинарное дерево - это конечное множество элементов, связанных с двумя разными бинарными деревьями - правым и левым поддеревьями.</p>
2
<p><strong>Деревом</strong>называют структуру данных, которая имеет древовидный вид, то есть характеризуется наличием набора связанных узлов. Бинарное дерево - это конечное множество элементов, связанных с двумя разными бинарными деревьями - правым и левым поддеревьями.</p>
3
<p>Способ представления:</p>
3
<p>Способ представления:</p>
4
<p>На что следует обратить внимание: - А - корень дерева; - B - корень левого поддерева и предок D; - С - корень правого поддерева; - D - потомок родительского узла B; если D располагается на уровне i, то B - на уровне i-1.</p>
4
<p>На что следует обратить внимание: - А - корень дерева; - B - корень левого поддерева и предок D; - С - корень правого поддерева; - D - потомок родительского узла B; если D располагается на уровне i, то B - на уровне i-1.</p>
5
<p>Необходимо выделить следующие термины: -<strong>узел (вершина)</strong>- это каждый элемент бинарного дерева; -<strong>ветви</strong>- связи между узлами; -<strong>глубина (высота)</strong>- наибольший уровень какого-нибудь элемента; -<strong>лист</strong>(терминальный узел) - термин применяется, если элемент не имеет потомков; -<strong>внутренние узлы</strong>- узлы ветвления; -<strong>степень</strong>внутреннего узла - число его потомков (наибольшая степень всех существующих узлов - это степень всего бинарного дерева); -<strong>длина пути</strong>к x - количество ветвей, которые необходимо пройти от корня до текущего узла x. Длина пути самого корня равна нулю, а узел на уровне i обладает длиной пути, которая равна i.</p>
5
<p>Необходимо выделить следующие термины: -<strong>узел (вершина)</strong>- это каждый элемент бинарного дерева; -<strong>ветви</strong>- связи между узлами; -<strong>глубина (высота)</strong>- наибольший уровень какого-нибудь элемента; -<strong>лист</strong>(терминальный узел) - термин применяется, если элемент не имеет потомков; -<strong>внутренние узлы</strong>- узлы ветвления; -<strong>степень</strong>внутреннего узла - число его потомков (наибольшая степень всех существующих узлов - это степень всего бинарного дерева); -<strong>длина пути</strong>к x - количество ветвей, которые необходимо пройти от корня до текущего узла x. Длина пути самого корня равна нулю, а узел на уровне i обладает длиной пути, которая равна i.</p>
6
<h2>Использование</h2>
6
<h2>Использование</h2>
7
<p>На практике бинарные деревья применяются, когда в каждой точке какого-нибудь вычислительного процесса нужно принимать одно из 2-х возможных решений. Существует множество задач, решаемых таким способом. Одна из них - выполнение операции, условно говоря, X с каждым элементом дерева. X рассматривается в качестве параметра обобщенной задачи посещения всех вершин либо задачи обхода дерева. Если рассмотреть такую задачу в качестве единого последовательного процесса, то можно сказать, что отдельные вершины посещаются в определенном порядке, то есть могут считаться линейно расположенными.</p>
7
<p>На практике бинарные деревья применяются, когда в каждой точке какого-нибудь вычислительного процесса нужно принимать одно из 2-х возможных решений. Существует множество задач, решаемых таким способом. Одна из них - выполнение операции, условно говоря, X с каждым элементом дерева. X рассматривается в качестве параметра обобщенной задачи посещения всех вершин либо задачи обхода дерева. Если рассмотреть такую задачу в качестве единого последовательного процесса, то можно сказать, что отдельные вершины посещаются в определенном порядке, то есть могут считаться линейно расположенными.</p>
8
<h2>Способы обхода</h2>
8
<h2>Способы обхода</h2>
9
<p>Предположим, что имеется дерево (не пустое), в котором A является корнем, а B и C - левым и правым поддеревьями.</p>
9
<p>Предположим, что имеется дерево (не пустое), в котором A является корнем, а B и C - левым и правым поддеревьями.</p>
10
<p>Есть 3 способа обхода: 1. Обход в прямом порядке - сверху вниз: A, B, C - префиксная форма. 2. Обход слева направо (симметричный порядок): B, A, C - инфиксная форма. 3. Обход снизу вверх (обратный порядок): B, C, A - постфиксная форма.</p>
10
<p>Есть 3 способа обхода: 1. Обход в прямом порядке - сверху вниз: A, B, C - префиксная форма. 2. Обход слева направо (симметричный порядок): B, A, C - инфиксная форма. 3. Обход снизу вверх (обратный порядок): B, C, A - постфиксная форма.</p>
11
<h2>Реализация</h2>
11
<h2>Реализация</h2>
12
<p>На практике вершину древа можно описать в качестве структуры:</p>
12
<p>На практике вершину древа можно описать в качестве структуры:</p>
13
<p>Тогда обход в префиксной форме будет выглядеть следующим образом:</p>
13
<p>Тогда обход в префиксной форме будет выглядеть следующим образом:</p>
14
<p>Теперь инфиксная форма:</p>
14
<p>Теперь инфиксная форма:</p>
15
<p>И постфиксная:</p>
15
<p>И постфиксная:</p>
16
<h2>Бинарное дерево поиска</h2>
16
<h2>Бинарное дерево поиска</h2>
17
<p>Оно представляет собой двоичное (бинарное) дерево, для которого справедлив ряд дополнительных условий. Эти условия называют свойствами:</p>
17
<p>Оно представляет собой двоичное (бинарное) дерево, для которого справедлив ряд дополнительных условий. Эти условия называют свойствами:</p>
18
<p>Данные в каждой вершине должны обладать ключами, где определена операция сравнения “<”.</p>
18
<p>Данные в каждой вершине должны обладать ключами, где определена операция сравнения “<”.</p>
19
<p>Обычно информация, которая представляет каждую вершину, - это запись, а не единственное поле данных.</p>
19
<p>Обычно информация, которая представляет каждую вершину, - это запись, а не единственное поле данных.</p>
20
<p>Чтобы составить бинарное дерево поиска, пригодится функция добавления узла:</p>
20
<p>Чтобы составить бинарное дерево поиска, пригодится функция добавления узла:</p>
21
<h2>Удаляем поддерево</h2>
21
<h2>Удаляем поддерево</h2>
22
<h2>B-дерево. Поиск по B-дереву</h2>
22
<h2>B-дерево. Поиск по B-дереву</h2>
23
<p>В бинарном дереве поиска каждый узел содержит лишь одно значение (ключ) и не более 2-х потомков. Но существует особый вид древа поиска, называемый B-дерево (Би-дерево). Здесь узел содержит больше одного значения и больше 2-х потомков. Также его называют сбалансированным по высоте деревом поиска порядка m (Height Balanced m-way Search Tree).</p>
23
<p>В бинарном дереве поиска каждый узел содержит лишь одно значение (ключ) и не более 2-х потомков. Но существует особый вид древа поиска, называемый B-дерево (Би-дерево). Здесь узел содержит больше одного значения и больше 2-х потомков. Также его называют сбалансированным по высоте деревом поиска порядка m (Height Balanced m-way Search Tree).</p>
24
<p>B-дерево представляет собой сбалансированное дерево поиска, где каждый узел содержит много ключей и имеет больше 2-х потомков.</p>
24
<p>B-дерево представляет собой сбалансированное дерево поиска, где каждый узел содержит много ключей и имеет больше 2-х потомков.</p>
25
<p>Возможные операции: 1. Поиск. 2. Вставка (вставляем новый элемент). 3. Удаление.</p>
25
<p>Возможные операции: 1. Поиск. 2. Вставка (вставляем новый элемент). 3. Удаление.</p>
26
<p>Каждое B-дерево имеет порядок. Для примера рассмотрим B-дерево порядка m. Оно будет обладать рядом следующих характеристик:</p>
26
<p>Каждое B-дерево имеет порядок. Для примера рассмотрим B-дерево порядка m. Оно будет обладать рядом следующих характеристик:</p>
27
<p>Ниже можно посмотреть на B-дерево четвертого порядка, содержащее максимум три значения ключа и максимум четыре потомка для каждой вершины.</p>
27
<p>Ниже можно посмотреть на B-дерево четвертого порядка, содержащее максимум три значения ключа и максимум четыре потомка для каждой вершины.</p>
28
<p>Поиск аналогичен поиску по двоичному дереву. Следует вспомнить, что в двоичном древе поиск начинается с корня, причем каждый раз принимается 2-стороннее решение (пойти по правому поддереву либо по левому). В В-дереве поиск тоже начинается с корневого узла, но с той лишь разницей, что на каждом шаге принимается не 2-стороннее, а n-стороннее решение, причем n для дерева в данном случае представляет общее число потомков рассматриваемого узла. Сложность поиска такого дерева - O(log n).</p>
28
<p>Поиск аналогичен поиску по двоичному дереву. Следует вспомнить, что в двоичном древе поиск начинается с корня, причем каждый раз принимается 2-стороннее решение (пойти по правому поддереву либо по левому). В В-дереве поиск тоже начинается с корневого узла, но с той лишь разницей, что на каждом шаге принимается не 2-стороннее, а n-стороннее решение, причем n для дерева в данном случае представляет общее число потомков рассматриваемого узла. Сложность поиска такого дерева - O(log n).</p>
29
<p>Алгоритм следующий:</p>
29
<p>Алгоритм следующий:</p>
30
<p>Также существует такое понятие, как вставка в B-дерево.</p>
30
<p>Также существует такое понятие, как вставка в B-дерево.</p>
31
<p>В В-дереве вставка нового элемента возможна лишь в узел-лист. То есть вставленная новая пара ключ-значение добавляется лишь к узлу-листу. Вот, как осуществляется вставка в B-дерево:</p>
31
<p>В В-дереве вставка нового элемента возможна лишь в узел-лист. То есть вставленная новая пара ключ-значение добавляется лишь к узлу-листу. Вот, как осуществляется вставка в B-дерево:</p>
32
<p>Более подробную информацию всегда можно получить на наших курсах по алгоритмам в Москве.</p>
32
<p>Более подробную информацию всегда можно получить на наших курсах по алгоритмам в Москве.</p>
33
<p><em>Источники: - https://zen.yandex.ru/media/id/5bbcbc1ba5bd5400a990e7d9/struktura-dannyh-bderevo-5d273e1dcfcc8600ac055454; - https://prog-cpp.ru/data-tree/.</em></p>
33
<p><em>Источники: - https://zen.yandex.ru/media/id/5bbcbc1ba5bd5400a990e7d9/struktura-dannyh-bderevo-5d273e1dcfcc8600ac055454; - https://prog-cpp.ru/data-tree/.</em></p>
34
34