Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

268 Глава 7. Деревья

7.1 Общие Деревья

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

Не всегда ясно, какие эксперты по производительности подразумевают «нелинейными» взглядами, но когда мы говорим, что деревья «нелинейны», мы обращаемся к организационным отношениям, которые более богаты, чем простое «прежде» и «после» отношений быть - объекты подростка в последовательностях. Отношения в дереве иерархические с некоторыми объектами, являющимися «выше» и некоторыми «ниже» других. Фактически, главная терминология для структур данных дерева прибывает из родословных, с условиями «родитель», «ребенок», «предок», и «потомок», являющийся наиболее распространенными словами раньше, описывал rela-tionships. Мы показываем пример родословной в рисунке 7.1.

Рисунок 7.1: родословная, показывая некоторым потомкам Абрахама, как зарегистрировано в Происхождении, главах 25-36.

7.1. Общие деревья 269

7.1.1 Определения дерева и свойства

Дерево - абстрактный тип данных, который хранит элементы иерархически. С excep-tion главного элемента, у каждого элемента в дереве есть исходный элемент и ноль или больше детских элементов. Дерево обычно визуализируется, помещая элементы в овалах или прямоугольниках, и таща связи между родителями и детьми с прямыми линиями. (См. рисунок 7.2.) Мы, как правило, называем главный элемент корнем дерева, но это оттянуто как самый высокий элемент с другими элементами, связываемыми ниже (полная противоположность ботанического дерева).

Рисунок 7.2: дерево с 17 узлами, представляющими организационную структуру fic-titious корпорация. Электроника R'Us сохранена в корне. Дети корня хранят R&D, Продажи, Покупка и Производство. Внутренние узлы хранят Sales, International, Overseas, Electronics R'Us и Производство.

Формальное определение дерева

Формально, мы определяем дерево T, чтобы быть рядом узлов, хранящих элементы в отношениях отцов и детей со следующими свойствами:

• Если T непуст, у него есть специальный узел, названный корнем T, который имеет нет

родитель.

• У каждого узла v T, отличающегося от корня, есть уникальный родительский узел w; каждый

узел с родительским w - ребенок w.

Обратите внимание на то, что согласно нашему определению, дерево может быть пустым, означая, что это не делает

имейте любые узлы. Это соглашение также позволяет нам определять дерево рекурсивно, такой, что дерево T или пусто или состоит из узла r, названный корнем T, и (возможно пустой) набор деревьев, корни которых - дети r.