Структуры данных и алгоритмы

Учебное пособие по древовидной структуре данных для начинающих

Учебное пособие по древовидной структуре данных для начинающих

Вступление

Дерево в программном обеспечении похоже на биологическое дерево, но со следующими отличиями:

Ветви дерева программного обеспечения представлены прямыми линиями. Хорошим примером дерева программ, которое вы, возможно, использовали, является дерево каталогов жесткого диска вашего компьютера.

Есть разные виды деревьев. Есть общее дерево, из которого происходят другие деревья. Остальные деревья получаются путем введения ограничений в общее дерево. Например, вам может понадобиться дерево, в котором от узла исходят не более двух ветвей; такое дерево будет называться двоичным деревом.  В этой статье описывается общее дерево и как получить доступ ко всем его узлам.

Гиперссылка для загрузки кода приведена внизу статьи.

Чтобы понять примеры кода в этой статье, вам необходимо иметь базовые знания в JavaScript (ECMAScript). Если у вас нет этих знаний, вы можете получить их по адресу http: // www.широкая сеть.ru / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm

Общая древовидная диаграмма


«А» - корневой узел; это узел первого уровня. B, C, D находятся на второй строке; это узлы второго уровня. E, F, G, H, I, J, K находятся на третьей линии, и они являются узлами третьего уровня. Четвертая строка создала бы узлы четвертого уровня и т. Д.

Свойства дерева

- Все ветви для всех уровней узлов имеют один источник, который является корневым узлом.

- Дерево имеет N - 1 ветвь, где N - общее количество узлов. На приведенной выше диаграмме общего дерева 11 узлов и 10 ветвей.

- В отличие от людей, где у каждого ребенка два родителя, в дереве программного обеспечения у каждого ребенка есть только один родитель. Корневой узел - самый большой родительский предок. Родитель может иметь более одного ребенка. Каждый узел, кроме корневого, является дочерним.

Словарь по дереву

Обход всех узлов дерева

Все узлы дерева могут быть доступны для чтения или изменения любого значения узла. Однако это не происходит произвольно. Это можно сделать тремя способами, каждый из которых включает обход в глубину следующим образом:

1) В порядке: Проще говоря, в этой схеме сначала проходит левое поддерево; затем осуществляется доступ к корневому узлу; затем проходит правое поддерево. Эта схема обозначается как левый-> корень-> правый. Рис. 1 повторно отображается здесь для удобства использования:

Предполагая, что на каждый узел приходится два брата и сестры; затем left-> root-> right означает, что вы сначала получаете доступ к самому нижнему и самому левому узлам, затем к родительскому узлу, а затем к правому брату. Если братьев и сестер больше двух, первый должен быть левым, а остальные правые - правым. Для общего дерева, приведенного выше, доступ к нижнему левому поддереву имеет значение [EBF]. Это поддерево. Родителем этого поддерева является A; Итак, следующий доступ к A, чтобы получить [EBF] A. Затем осуществляется доступ к поддереву [GCHI], чтобы иметь поддерево большего размера, [[EBF] A [GCHI]]. Вы можете увидеть, что левый-> корневой-> правый профиль изображает самого себя. Это большое левое поддерево будет иметь поддерево [JDK] справа, чтобы завершить обход, чтобы получить, [[EBF] A [GCHI]] [JDK].

2) Предварительный заказ: Проще говоря, в этой схеме сначала осуществляется доступ к корневому узлу, затем выполняется обход левого поддерева, а затем обход правого поддерева. Эта схема обозначается как корень-> влево-> вправо. Рис. 1 повторно отображается здесь для удобства использования.

Предполагая, что на каждый узел приходится два брата и сестры; затем root-> left-> right означает, что вы сначала получаете доступ к корню, затем к левому непосредственному дочернему элементу, а затем к правому непосредственному дочернему элементу. Если братьев и сестер больше двух, первый должен быть левым, а остальные правые - правым. Крайний левый дочерний элемент левого дочернего элемента - следующий, к которому нужно получить доступ. Для общего дерева выше корневым поддеревом является [ABCD]. Слева от этого поддерева находится поддерево [EF], задающее последовательность доступа [ABCD] [EF]. Справа от этого большего поддерева у вас есть два поддерева, [GHI] и [JK], дающие полную последовательность, [ABCD] [EF] [GHI] [JK]. Вы можете видеть, что корневой-> левый-> правый профиль изображает себя.

3) Пост-заказ: Проще говоря, в этой схеме сначала выполняется обход левого поддерева, затем обход правого поддерева, а затем доступ к корню. Эта схема обозначается как левый-> правый-> корень. Рис. 1 повторно отображается здесь для удобства использования.

Для этого дерева поддеревья: [EFB], [GHIC], [JKD] и [A], которые образуют последовательность, [EFB], [GHIC], [JKD] [A]. Вы можете увидеть левый-> правый-> корневой профиль, изображающий себя.

Создание дерева

Приведенное выше дерево будет создано с использованием ECMAScript, который похож на последнюю версию JavaScript. Каждый узел представляет собой массив. Первый элемент каждого массива узлов является родителем узла, еще один массив. Остальные элементы узла являются дочерними элементами узла, начиная с самого левого дочернего элемента. Существует карта ECMAScript, которая связывает каждый массив с соответствующей строкой (буквой). Первый сегмент кода: