0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Основные термины</a></li>
1
<ul><li><a>Основные термины</a></li>
2
<li><a>Обход древа</a></li>
2
<li><a>Обход древа</a></li>
3
<li><a>Бинарные (двоичные) деревья</a></li>
3
<li><a>Бинарные (двоичные) деревья</a></li>
4
<li><a>Что значит древо в контексте программирования?</a></li>
4
<li><a>Что значит древо в контексте программирования?</a></li>
5
</ul><p>Какую выгоду можно извлечь из такой структуры данных, как дерево? В этой статье мы расскажем о данных в виде дерева, рассмотрим основные определения, которые следует знать, а также узнаем, как и зачем используется дерево в<strong>программировании</strong>. Спойлер: бинарные деревья часто применяют для поиска информации в базах данных, для сортировки данных, для проведения вычислений, для кодирования и в других случаях. Но давайте обо всем по порядку.</p>
5
</ul><p>Какую выгоду можно извлечь из такой структуры данных, как дерево? В этой статье мы расскажем о данных в виде дерева, рассмотрим основные определения, которые следует знать, а также узнаем, как и зачем используется дерево в<strong>программировании</strong>. Спойлер: бинарные деревья часто применяют для поиска информации в базах данных, для сортировки данных, для проведения вычислений, для кодирования и в других случаях. Но давайте обо всем по порядку.</p>
6
<h2>Основные термины</h2>
6
<h2>Основные термины</h2>
7
<p><strong>Дерево</strong>- это, по сути, один из частных случаев графа. Древовидная модель может быть весьма эффективна в случае представления динамических данных, особенно тогда, когда у разработчика стоит цель быстрого поиска информации, в тех же базах данных, к примеру. Еще<strong>древом</strong>называют структуру данных, которая представляет собой совокупность элементов, а также отношений между этими элементами, что вместе образует<strong>иерархическую древовидную структуру</strong>.</p>
7
<p><strong>Дерево</strong>- это, по сути, один из частных случаев графа. Древовидная модель может быть весьма эффективна в случае представления динамических данных, особенно тогда, когда у разработчика стоит цель быстрого поиска информации, в тех же базах данных, к примеру. Еще<strong>древом</strong>называют структуру данных, которая представляет собой совокупность элементов, а также отношений между этими элементами, что вместе образует<strong>иерархическую древовидную структуру</strong>.</p>
8
<p>Каждый элемент - это вершина или<strong>узел</strong>дерева. Узлы, соединенные направленными дугами, называются<strong>ветвями</strong>. Начальный узел - это<strong>корень</strong>дерева (корневой узел).<strong>Листья</strong>- это узлы, в которые входит 1 ветвь, причем не выходит ни одной.</p>
8
<p>Каждый элемент - это вершина или<strong>узел</strong>дерева. Узлы, соединенные направленными дугами, называются<strong>ветвями</strong>. Начальный узел - это<strong>корень</strong>дерева (корневой узел).<strong>Листья</strong>- это узлы, в которые входит 1 ветвь, причем не выходит ни одной.</p>
9
<p>Общую терминологию можно посмотреть на левой и правой части картинки ниже:</p>
9
<p>Общую терминологию можно посмотреть на левой и правой части картинки ниже:</p>
10
<p>Какие<strong>свойства</strong>есть у каждого древа:</p>
10
<p>Какие<strong>свойства</strong>есть у каждого древа:</p>
11
<p>- существует узел, в который не входит ни одна ветвь;</p>
11
<p>- существует узел, в который не входит ни одна ветвь;</p>
12
<p>- в каждый узел, кроме корневого узла, входит 1 ветвь.</p>
12
<p>- в каждый узел, кроме корневого узла, входит 1 ветвь.</p>
13
<p>На практике деревья нередко применяют, изображая различные иерархии. Очень популярны, к примеру, генеалогические древа - они хорошо известны. Все узлы с ветвями, исходящими из единой общей вершины, являются потомками, а сама вершина называется предком (родительским узлом). Корневой узел не имеет предков, а листья не имеют потомков.</p>
13
<p>На практике деревья нередко применяют, изображая различные иерархии. Очень популярны, к примеру, генеалогические древа - они хорошо известны. Все узлы с ветвями, исходящими из единой общей вершины, являются потомками, а сама вершина называется предком (родительским узлом). Корневой узел не имеет предков, а листья не имеют потомков.</p>
14
<p>Также у дерева есть<strong>высота (глубина)</strong>. Она определяется числом уровней, на которых располагаются узлы дерева. Глубина пустого древа равняется нулю, а если речь идет о дереве из одного корня, тогда единице. В данном случае на нулевом уровне может быть лишь одна вершина - корень, на 1-м - потомки корня, на 2-м - потомки потомков корня и т. д.</p>
14
<p>Также у дерева есть<strong>высота (глубина)</strong>. Она определяется числом уровней, на которых располагаются узлы дерева. Глубина пустого древа равняется нулю, а если речь идет о дереве из одного корня, тогда единице. В данном случае на нулевом уровне может быть лишь одна вершина - корень, на 1-м - потомки корня, на 2-м - потомки потомков корня и т. д.</p>
15
<p>Ниже изображен графический вывод древа с 4-мя уровнями (дерево имеет глубину, равную четырем):</p>
15
<p>Ниже изображен графический вывод древа с 4-мя уровнями (дерево имеет глубину, равную четырем):</p>
16
<p>Следующий термин, который стоит рассмотреть, - это<strong>поддерево</strong>. Поддеревом называют часть древообразной структуры, которую можно представить в виде отдельного дерева.</p>
16
<p>Следующий термин, который стоит рассмотреть, - это<strong>поддерево</strong>. Поддеревом называют часть древообразной структуры, которую можно представить в виде отдельного дерева.</p>
17
<p>Идем дальше. Древо может быть<strong>упорядоченным</strong>- в данном случае ветви, которые исходят из каждого узла, упорядочены по некоторому критерию.</p>
17
<p>Идем дальше. Древо может быть<strong>упорядоченным</strong>- в данном случае ветви, которые исходят из каждого узла, упорядочены по некоторому критерию.</p>
18
<p><strong>Степень вершины</strong>в древе - это число ветвей (дуг), выходящих из этой вершины. Степень равняется максимальной степени вершины, которая входит в дерево. В этом случае листьями будут узлы, имеющие нулевую степень. По величине степени деревья бывают: </p>
18
<p><strong>Степень вершины</strong>в древе - это число ветвей (дуг), выходящих из этой вершины. Степень равняется максимальной степени вершины, которая входит в дерево. В этом случае листьями будут узлы, имеющие нулевую степень. По величине степени деревья бывают: </p>
19
<p>- двоичные (степень не больше двух);</p>
19
<p>- двоичные (степень не больше двух);</p>
20
<p>- сильноветвящиеся (степень больше двух).</p>
20
<p>- сильноветвящиеся (степень больше двух).</p>
21
<p>Деревья - это<strong>рекурсивные структуры</strong>, ведь каждое поддерево тоже является деревом. Каждый элемент такой рекурсивной структуры является или пустой структурой, или компонентом, с которым связано конечное количество поддеревьев.</p>
21
<p>Деревья - это<strong>рекурсивные структуры</strong>, ведь каждое поддерево тоже является деревом. Каждый элемент такой рекурсивной структуры является или пустой структурой, или компонентом, с которым связано конечное количество поддеревьев.</p>
22
<p>Когда мы говорим о рекурсивных структурах, то действия с ними удобнее описывать посредством рекурсивных алгоритмов.</p>
22
<p>Когда мы говорим о рекурсивных структурах, то действия с ними удобнее описывать посредством рекурсивных алгоритмов.</p>
23
<h2>Обход древа</h2>
23
<h2>Обход древа</h2>
24
<p>Чтобы выполнить конкретную операцию над всеми вершинами, надо все эти узлы просмотреть. Данную задачу называют<strong>обходом дерева</strong>. То есть обход представляет собой упорядоченную последовательность узлов, в которой каждый узел встречается лишь один раз.</p>
24
<p>Чтобы выполнить конкретную операцию над всеми вершинами, надо все эти узлы просмотреть. Данную задачу называют<strong>обходом дерева</strong>. То есть обход представляет собой упорядоченную последовательность узлов, в которой каждый узел встречается лишь один раз.</p>
25
<p>В процессе обхода все узлы должны посещаться в некотором, заранее определенном порядке. Есть ряд способов обхода, вот три основные:</p>
25
<p>В процессе обхода все узлы должны посещаться в некотором, заранее определенном порядке. Есть ряд способов обхода, вот три основные:</p>
26
<p>- прямой (префиксный, preorder);</p>
26
<p>- прямой (префиксный, preorder);</p>
27
<p>- симметричный (инфиксный, inorder);</p>
27
<p>- симметричный (инфиксный, inorder);</p>
28
<p>- обратный (постфиксный, postorder).</p>
28
<p>- обратный (постфиксный, postorder).</p>
29
<p>Существует много древовидных структур данных: двоичные (бинарные), красно-черные, В-деревья, матричные, смешанные и пр. Поговорим о бинарных.</p>
29
<p>Существует много древовидных структур данных: двоичные (бинарные), красно-черные, В-деревья, матричные, смешанные и пр. Поговорим о бинарных.</p>
30
<h2>Бинарные (двоичные) деревья</h2>
30
<h2>Бинарные (двоичные) деревья</h2>
31
<p>Бинарные имеют степень не более двух. То есть двоичным древом можно назвать динамическую структуру данных, где каждый узел имеет не большое 2-х потомков. В результате двоичное дерево состоит из элементов, где каждый из элементов содержит информационное поле, а также не больше 2-х ссылок на различные поддеревья. На каждый элемент древа есть только одна ссылка.</p>
31
<p>Бинарные имеют степень не более двух. То есть двоичным древом можно назвать динамическую структуру данных, где каждый узел имеет не большое 2-х потомков. В результате двоичное дерево состоит из элементов, где каждый из элементов содержит информационное поле, а также не больше 2-х ссылок на различные поддеревья. На каждый элемент древа есть только одна ссылка.</p>
32
<p>У бинарного древа каждый текущий узел - это структура, которая состоит из 4-х видов полей. Какие это поля:</p>
32
<p>У бинарного древа каждый текущий узел - это структура, которая состоит из 4-х видов полей. Какие это поля:</p>
33
<p>- информационное (ключ вершины);</p>
33
<p>- информационное (ключ вершины);</p>
34
<p>- служебное (включена вспомогательная информация, однако таких полей может быть несколько, а может и не быть вовсе);</p>
34
<p>- служебное (включена вспомогательная информация, однако таких полей может быть несколько, а может и не быть вовсе);</p>
35
<p>- указатель на правое поддерево;</p>
35
<p>- указатель на правое поддерево;</p>
36
<p>- указатель на левое поддерево.</p>
36
<p>- указатель на левое поддерево.</p>
37
<p>Самый удобный вид бинарного древа - бинарное дерево поиска.</p>
37
<p>Самый удобный вид бинарного древа - бинарное дерево поиска.</p>
38
<h2><strong>Что значит древо в контексте программирования?</strong></h2>
38
<h2><strong>Что значит древо в контексте программирования?</strong></h2>
39
<p>Мы можем долго рассуждать о математическом определении древа, но это вряд ли поможет понять, какие именно выгоды можно извлечь из древовидной структуры данных. Тут важно отметить, что<strong>древо является способом организации данных в форме иерархической структуры</strong>.</p>
39
<p>Мы можем долго рассуждать о математическом определении древа, но это вряд ли поможет понять, какие именно выгоды можно извлечь из древовидной структуры данных. Тут важно отметить, что<strong>древо является способом организации данных в форме иерархической структуры</strong>.</p>
40
<p>В каких случаях древовидные структуры могут быть полезны при программировании:</p>
40
<p>В каких случаях древовидные структуры могут быть полезны при программировании:</p>
41
<ol><li>Когда данная иерархия <strong>существует в предметной области</strong> разрабатываемой программы. К примеру, программа должна обрабатывать генеалогическое древо либо работать со структурой каталогов. В таких ситуациях иногда есть смысл <strong>сохранять</strong> между объектами программы <strong>существующие</strong> иерархические отношения. В качестве примера можно вывести древо каталогов операционной системы UNIX:</li>
41
<ol><li>Когда данная иерархия <strong>существует в предметной области</strong> разрабатываемой программы. К примеру, программа должна обрабатывать генеалогическое древо либо работать со структурой каталогов. В таких ситуациях иногда есть смысл <strong>сохранять</strong> между объектами программы <strong>существующие</strong> иерархические отношения. В качестве примера можно вывести древо каталогов операционной системы UNIX:</li>
42
</ol><ul><li>Когда между объектами, которые обрабатывает программа, отношения иерархии не заданы явно, но их <strong>можно задать</strong>, что сделает обработку данных удобнее. Как тут не вспомнить разработку парсеров либо трансляторов, где весьма полезным может быть <em>древо синтаксического разбора?</em></li>
42
</ol><ul><li>Когда между объектами, которые обрабатывает программа, отношения иерархии не заданы явно, но их <strong>можно задать</strong>, что сделает обработку данных удобнее. Как тут не вспомнить разработку парсеров либо трансляторов, где весьма полезным может быть <em>древо синтаксического разбора?</em></li>
43
<li>А сейчас очевидная вещь: поиск объектов более <strong>эффективен</strong>, когда объекты упорядочены, будь то те же базы данных. К примеру, поиск значения в неструктурированном наборе из тысячи элементов потребует до тысячи операций, тогда как в упорядоченном наборе может хватить всего дюжины. Вывод прост: раз<strong>иерархия - эффективный способ упорядочивания объектов</strong>, почему же не использовать древовидную иерархию для <strong>ускорения поиска</strong>узлов со значениями? Так и происходит: если вспомнить бинарные деревья, то на практике их можно применять в следующих целях:</li>
43
<li>А сейчас очевидная вещь: поиск объектов более <strong>эффективен</strong>, когда объекты упорядочены, будь то те же базы данных. К примеру, поиск значения в неструктурированном наборе из тысячи элементов потребует до тысячи операций, тогда как в упорядоченном наборе может хватить всего дюжины. Вывод прост: раз<strong>иерархия - эффективный способ упорядочивания объектов</strong>, почему же не использовать древовидную иерархию для <strong>ускорения поиска</strong>узлов со значениями? Так и происходит: если вспомнить бинарные деревья, то на практике их можно применять в следующих целях:</li>
44
</ul><p>- поиск данных в базах данных (специально построенных деревьях);</p>
44
</ul><p>- поиск данных в базах данных (специально построенных деревьях);</p>
45
<p>- сортировка и вывод данных;</p>
45
<p>- сортировка и вывод данных;</p>
46
<p>- вычисления арифметических выражений;</p>
46
<p>- вычисления арифметических выражений;</p>
47
<p>- кодирование по методу Хаффмана и пр.</p>
47
<p>- кодирование по методу Хаффмана и пр.</p>
48
<p><em>Источники:</em></p>
48
<p><em>Источники:</em></p>
49
<ul><li><em>https://pro-prof.com/archives/682;</em></li>
49
<ul><li><em>https://pro-prof.com/archives/682;</em></li>
50
<li><em>http://</em><em>e-</em><em>learning.</em><em>bmstu.</em><em>ru/</em><em>moodle/</em><em>pluginfile.</em><em>php/7049/</em><em>mod_</em><em>resource/</em><em>content/1/Бинарные%20деревья_14</em><em>pt2.</em><em>pdf.</em></li>
50
<li><em>http://</em><em>e-</em><em>learning.</em><em>bmstu.</em><em>ru/</em><em>moodle/</em><em>pluginfile.</em><em>php/7049/</em><em>mod_</em><em>resource/</em><em>content/1/Бинарные%20деревья_14</em><em>pt2.</em><em>pdf.</em></li>
51
</ul>
51
</ul>