0 added
4 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Иерархические структуры окружают нас везде - например, структура управления предприятием, адреса, содержания в книгах. Иерархия встречается и в программировании, например, в работе со стандартными типами данных, такими как массивы. Так как такие данные нельзя разместить линейно, программисты используют деревья. Они считаются одной из важнейших нелинейных структур, которые встречаются при работе с алгоритмами.</p>
1
<p>Иерархические структуры окружают нас везде - например, структура управления предприятием, адреса, содержания в книгах. Иерархия встречается и в программировании, например, в работе со стандартными типами данных, такими как массивы. Так как такие данные нельзя разместить линейно, программисты используют деревья. Они считаются одной из важнейших нелинейных структур, которые встречаются при работе с алгоритмами.</p>
2
<p>В этом уроке мы поговорим о деревьях, узнаем, какие проблемы они решают, и какие характеристики и способы представления деревьев существуют.</p>
2
<p>В этом уроке мы поговорим о деревьях, узнаем, какие проблемы они решают, и какие характеристики и способы представления деревьев существуют.</p>
3
<h2>Что такое деревья и для чего они нужны</h2>
3
<h2>Что такое деревья и для чего они нужны</h2>
4
<p>Деревья используют, чтобы отразить в памяти компьютера иерархические взаимосвязи. Их применяют для реестра Windows, XML-документов, DOM-структур HTML-страниц, родословных, каталогов запчастей или файловых систем. Например, так файловую структуру видят конечные пользователи:</p>
4
<p>Деревья используют, чтобы отразить в памяти компьютера иерархические взаимосвязи. Их применяют для реестра Windows, XML-документов, DOM-структур HTML-страниц, родословных, каталогов запчастей или файловых систем. Например, так файловую структуру видят конечные пользователи:</p>
5
<p>При этом для программистов она выглядит иначе:</p>
5
<p>При этом для программистов она выглядит иначе:</p>
6
<p>Это древовидное представление структуры. Из этой схемы можно сделать вывод, что<strong>дерево</strong>- это конечное множество, которое состоит из<strong>вершин</strong>или<strong>узлов</strong>, а еще есть выделенный узел -<strong>корень дерева</strong>. В примере выше вершины - это все папки, а корень дерева - "Новая папка".</p>
6
<p>Это древовидное представление структуры. Из этой схемы можно сделать вывод, что<strong>дерево</strong>- это конечное множество, которое состоит из<strong>вершин</strong>или<strong>узлов</strong>, а еще есть выделенный узел -<strong>корень дерева</strong>. В примере выше вершины - это все папки, а корень дерева - "Новая папка".</p>
7
<p>Каждый узел содержит данные и ссылки на другие непересекающиеся между собой деревья. В этом случае каждая папка в дереве, от которой исходят другие данные, является для них<strong>корневым узлом</strong>. При этом эти данные образуют поддерево основного дерева.</p>
7
<p>Каждый узел содержит данные и ссылки на другие непересекающиеся между собой деревья. В этом случае каждая папка в дереве, от которой исходят другие данные, является для них<strong>корневым узлом</strong>. При этом эти данные образуют поддерево основного дерева.</p>
8
<p>Помимо представления иерархических взаимосвязей, деревья применяют в следующих случаях:</p>
8
<p>Помимо представления иерархических взаимосвязей, деревья применяют в следующих случаях:</p>
9
<ul><li>Организация быстрого поиска в отсортированных данных, например, в индексах баз данных</li>
9
<ul><li>Организация быстрого поиска в отсортированных данных, например, в индексах баз данных</li>
10
<li>Кластеризация данных. Возможность разбивать данные на кластеры применяется в базах данных и машинном обучении</li>
10
<li>Кластеризация данных. Возможность разбивать данные на кластеры применяется в базах данных и машинном обучении</li>
11
<li>Решение сложных арифметических выражений. Дерево используется, чтобы хранить порядок выполнения операций, значений аргументов и промежуточных результатов</li>
11
<li>Решение сложных арифметических выражений. Дерево используется, чтобы хранить порядок выполнения операций, значений аргументов и промежуточных результатов</li>
12
<li>Алгоритмы принятия решений. Дерево решений - инструмент интеллектуального анализа данных и проведения предсказаний. Он считается более простым в работе инструментом, чем нейросети, так как формулирует правила на естественном языке</li>
12
<li>Алгоритмы принятия решений. Дерево решений - инструмент интеллектуального анализа данных и проведения предсказаний. Он считается более простым в работе инструментом, чем нейросети, так как формулирует правила на естественном языке</li>
13
<li>Сетевое взаимодействие. Деревья используют для маршрутизации и работы механизмов определения IP-адресов по URL сайта, например, DNS-сервера</li>
13
<li>Сетевое взаимодействие. Деревья используют для маршрутизации и работы механизмов определения IP-адресов по URL сайта, например, DNS-сервера</li>
14
</ul><p>Деревья часто используют в проектах по разработке программ. Как результат - разработчики выделили терминологию описания узлов и формы деревьев.</p>
14
</ul><p>Деревья часто используют в проектах по разработке программ. Как результат - разработчики выделили терминологию описания узлов и формы деревьев.</p>
15
<h2>Какие узлы есть в деревьях</h2>
15
<h2>Какие узлы есть в деревьях</h2>
16
<p>Так как внешний вид дерева схож с генеалогическим деревом, термины генеалогии применяются и в программировании. Например, в отношении алгоритмических деревьев можно услышать такие термины, как "основатель династии", "мама", "ребенок", "брат", "двоюродный дядя". При этом существуют стандартизированные именования для отношений узлов:</p>
16
<p>Так как внешний вид дерева схож с генеалогическим деревом, термины генеалогии применяются и в программировании. Например, в отношении алгоритмических деревьев можно услышать такие термины, как "основатель династии", "мама", "ребенок", "брат", "двоюродный дядя". При этом существуют стандартизированные именования для отношений узлов:</p>
17
<ul><li><strong>Родительский узел</strong>или<strong>предок</strong>- узел, который находится на первом уровне иерархии</li>
17
<ul><li><strong>Родительский узел</strong>или<strong>предок</strong>- узел, который находится на первом уровне иерархии</li>
18
<li><strong>Дочерний узел</strong>или<strong>потомок</strong>- узел, на который есть ссылки из рассматриваемого узла</li>
18
<li><strong>Дочерний узел</strong>или<strong>потомок</strong>- узел, на который есть ссылки из рассматриваемого узла</li>
19
<li><strong>Корневой узел</strong>- узел, на который нет ссылок из других узлов</li>
19
<li><strong>Корневой узел</strong>- узел, на который нет ссылок из других узлов</li>
20
<li><strong>Сестринские узлы</strong>- два узла, у которых общие родители</li>
20
<li><strong>Сестринские узлы</strong>- два узла, у которых общие родители</li>
21
<li><strong>Листовой узел</strong>,<strong>лист дерева</strong>или<strong>терминальный узел</strong>- узел, у которого количество поддеревьев равно нулю</li>
21
<li><strong>Листовой узел</strong>,<strong>лист дерева</strong>или<strong>терминальный узел</strong>- узел, у которого количество поддеревьев равно нулю</li>
22
<li><strong>Узел ветвления</strong>или<strong>внутренняя вершина</strong>- узел, у которого есть дочерние структуры</li>
22
<li><strong>Узел ветвления</strong>или<strong>внутренняя вершина</strong>- узел, у которого есть дочерние структуры</li>
23
</ul><p>Количество поддеревьев у узла называется его<strong>степенью</strong>*. Максимальное значение степени узла -<strong>степень дерева</strong>. Если степень дерева равна двум, значит, у каждого узла может быть не более двух потомков:</p>
23
</ul><p>Количество поддеревьев у узла называется его<strong>степенью</strong>*. Максимальное значение степени узла -<strong>степень дерева</strong>. Если степень дерева равна двум, значит, у каждого узла может быть не более двух потомков:</p>
24
<h2>Какие формы деревьев бывают</h2>
24
<h2>Какие формы деревьев бывают</h2>
25
<p>Из-за определенных особенностей задач и алгоритмов, разработчики применяют разные формы деревьев со своими особенностями организации вершин:</p>
25
<p>Из-за определенных особенностей задач и алгоритмов, разработчики применяют разные формы деревьев со своими особенностями организации вершин:</p>
26
<ul><li><strong>Упорядоченное дерево</strong>- дерево, в котором все вершины отсортированы. Такие деревья еще называются<strong>плоскими</strong>, так как при последовательном обходе вершин получится отсортированный массив:</li>
26
<ul><li><strong>Упорядоченное дерево</strong>- дерево, в котором все вершины отсортированы. Такие деревья еще называются<strong>плоскими</strong>, так как при последовательном обходе вершин получится отсортированный массив:</li>
27
</ul><p>Далее в курсе мы будем считать все деревья упорядоченными, если в условии не сказано обратное.</p>
27
</ul><p>Далее в курсе мы будем считать все деревья упорядоченными, если в условии не сказано обратное.</p>
28
<ul><li><strong>Полное дерево</strong>- дерево, в котором количество дочерних узлов у каждой внутренней вершины равно степени дерева:</li>
28
<ul><li><strong>Полное дерево</strong>- дерево, в котором количество дочерних узлов у каждой внутренней вершины равно степени дерева:</li>
29
</ul><ul><li><strong>Завершенное дерево</strong>- дерево, у которого каждый уровень, кроме последнего, является полным:</li>
29
</ul><ul><li><strong>Завершенное дерево</strong>- дерево, у которого каждый уровень, кроме последнего, является полным:</li>
30
</ul><ul><li><strong>Идеальное дерево</strong>- полное дерево, у которого все терминальные узлы располагаются на одном уровне:</li>
30
</ul><ul><li><strong>Идеальное дерево</strong>- полное дерево, у которого все терминальные узлы располагаются на одном уровне:</li>
31
</ul><p>Мы познакомились с основной терминологией, которая используется при работе с деревьями. Теперь рассмотрим, какие есть способы представления деревьев в графическом виде и в коде.</p>
31
</ul><p>Мы познакомились с основной терминологией, которая используется при работе с деревьями. Теперь рассмотрим, какие есть способы представления деревьев в графическом виде и в коде.</p>
32
<h2>Как могут выглядеть деревья</h2>
32
<h2>Как могут выглядеть деревья</h2>
33
<p>Чтобы изображать иерархические структуры, используют следующие варианты:</p>
33
<p>Чтобы изображать иерархические структуры, используют следующие варианты:</p>
34
<ul><li>Древовидное схематическое представление</li>
34
<ul><li>Древовидное схематическое представление</li>
35
<li>Круги Эйлера</li>
35
<li>Круги Эйлера</li>
36
<li>Списки с отступами</li>
36
<li>Списки с отступами</li>
37
<li>Код</li>
37
<li>Код</li>
38
</ul><p>Разберем каждый способ изображения дерева.</p>
38
</ul><p>Разберем каждый способ изображения дерева.</p>
39
<h3>Древовидное схематическое представление</h3>
39
<h3>Древовидное схематическое представление</h3>
40
<p>В качестве основного способа представления деревьев используют имена, номера вершин или содержимое полезных данных узла. Они соединяются линиями, которые обозначают связи между вершинами:</p>
40
<p>В качестве основного способа представления деревьев используют имена, номера вершин или содержимое полезных данных узла. Они соединяются линиями, которые обозначают связи между вершинами:</p>
41
<p>Этот способ похож на природные деревья, только в информатике корень дерева обычно рисуется вверху схемы.</p>
41
<p>Этот способ похож на природные деревья, только в информатике корень дерева обычно рисуется вверху схемы.</p>
42
<h3>Круги Эйлера</h3>
42
<h3>Круги Эйлера</h3>
43
<p>Мы можем изобразить алгоритмическое дерево по правилам теории множеств с помощью кругов Эйлера:</p>
43
<p>Мы можем изобразить алгоритмическое дерево по правилам теории множеств с помощью кругов Эйлера:</p>
44
<p>Данный способ на практике встречается достаточно редко, так как поддеревья обычно не пересекаются между собой. В такой ситуации использование схематичного представления более наглядно для человека.</p>
44
<p>Данный способ на практике встречается достаточно редко, так как поддеревья обычно не пересекаются между собой. В такой ситуации использование схематичного представления более наглядно для человека.</p>
45
<h3>Списки с отступами</h3>
45
<h3>Списки с отступами</h3>
46
<p>Иерархическую связь можно изображать через пронумерованный список с отступами, где отступ или номер строки будут означать ее уровень:</p>
46
<p>Иерархическую связь можно изображать через пронумерованный список с отступами, где отступ или номер строки будут означать ее уровень:</p>
47
<p>Такой формат используют при работе с книгой, так как оглавление - это дерево.</p>
47
<p>Такой формат используют при работе с книгой, так как оглавление - это дерево.</p>
48
<h3>Код</h3>
48
<h3>Код</h3>
49
<p>Чтобы работать с деревьями, их нужно уметь не только рисовать, но и хранить в памяти компьютера.</p>
49
<p>Чтобы работать с деревьями, их нужно уметь не только рисовать, но и хранить в памяти компьютера.</p>
50
<p>В виде кода мы получаем следующий класс узла:</p>
50
<p>В виде кода мы получаем следующий класс узла:</p>
51
-
<p><strong>Javascript</strong></p>
52
-
<p><strong>Java</strong></p>
53
-
<p><strong>Python</strong></p>
54
-
<p><strong>PHP</strong></p>
55
<p>Чтобы организовать из узла дерево, нужно добавить методы, которые заполняют ссылки на поддеревья child1 и child2. Как реализуются деревья в коде, разберем подробно в следующих уроках.</p>
51
<p>Чтобы организовать из узла дерево, нужно добавить методы, которые заполняют ссылки на поддеревья child1 и child2. Как реализуются деревья в коде, разберем подробно в следующих уроках.</p>
56
<p>Прежде чем писать код дерева, разработчики часто изображают иерархию графически, чтобы видеть полную картину взаимосвязей.</p>
52
<p>Прежде чем писать код дерева, разработчики часто изображают иерархию графически, чтобы видеть полную картину взаимосвязей.</p>
57
<h2>Выводы</h2>
53
<h2>Выводы</h2>
58
<p>Мы познакомились с такой структурой данных как деревья. Они используются, чтобы хранить информацию в иерархическом виде, индексировать и кластеризировать большие последовательности данных.</p>
54
<p>Мы познакомились с такой структурой данных как деревья. Они используются, чтобы хранить информацию в иерархическом виде, индексировать и кластеризировать большие последовательности данных.</p>
59
<p>В этом уроке мы также познакомились с основными обозначениями узлов, а также различными формами деревьев. Еще рассмотрели способы представления дерева - можно изображать иерархию с помощью схемы, кругов Эйлера, списком с отступами, а также в коде.</p>
55
<p>В этом уроке мы также познакомились с основными обозначениями узлов, а также различными формами деревьев. Еще рассмотрели способы представления дерева - можно изображать иерархию с помощью схемы, кругов Эйлера, списком с отступами, а также в коде.</p>