HTML Diff
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>