Представление бинарного дерева в виде связанного списка Бинарное
Представление бинарного дерева в виде связанного списка
Бинарное дерево (binary tree) - это множество узлов Т, таких что: множество Т пусто (не имеет узлов), или множество Т распадается на три непересекающихся подмножества: корень r; два возможно пустых поддерева ТL и ТR, каждое из которых представляет собой бинарное дерево; ТL называется левым поддеревом корня r, ТR - правым поддеревом корня r. 2 Терминология, связанная с деревьями Бинарное дерево не является разновидностью дерева общего вида! Рис.1. Дерево общего вида Рис.2. Рекурсивное определение непустого бинарного дерева
Примеры бинарных деревьев 3 Рис.3. Бинарные деревья, имеющие одинаковые узлы, но разную высоту Рис.4. Бинарные деревья, представляющие алгебраические выражения Рис.5. Пример бинарного дерева поиска
Абстрактное бинарное дерево Операции над абстрактным бинарным деревом: Создать пустое бинарное дерево. Создать бинарное дерево, содержащее один узел, по заданному элементу. Создать бинарное дерево по заданному корню и двум бинарным поддеревьям этого корня. Уничтожить бинарное дерево. Определить, пусто ли бинарное дерево. Определить или изменить данные, записанные в корне бинарного дерева. Присоединить к корню бинарного дерева левый или правый дочерний узел. Присоединить к корню бинарного дерева левое или правое поддерево. Отсоединить от корня бинарного дерева левое или правое поддерево. Вернуть копию левого или правого поддерева корня бинарного дерева. Обойти узлы бинарного дерева в прямом, симметричном или обратном порядке. 4
Реализация абстрактного бинарного дерева в виде связанного списка 5 root->leftChildPtr root->rightChildPtr Детали реализации: Каждый узел будет иметь указатели на свой левый и правый дочерний узел. Значение указателя NULL означает, что данный дочерний узел не существует. Для хранения данных узла определенного типа необходимо иметь соответствующий элемент структуры. Для обращения к дереву используется внешний указатель root на корень дерева. Указатель на корневой узел обеспечивает начальную точку для доступа ко всем остальным узлам дерева. В пустом дереве указатель root равен константе NULL. Рис.6. Представление бинарного дерева в виде связанного списка
6
Реализация методов класса BinaryTree 7
Обход бинарного дерева Рекурсивные алгоритмы обхода 8 Прямой обход Обратный обход Симметричный обход Рис.7. Бинарные деревья, представляющие алгебраические выражения, в зависимости от порядка обхода определяют три формы записи: префиксная а) –аb , б) -а/bс , в) *-аbс (прямой обход); инфиксная а) а-b , б) а-b/с , в) (а-b)*с (симметричный обход); постфиксная а) аb- , б) аbс/- , в) аb-с* (обратный обход)
Обход бинарного дерева 9 Конструктор копирования Построение и обход бинарного дерева Деструктор а) б) в) Рис.8. Обход бинарного дерева: а)прямой; б) симметричный; в) обратный
Обход бинарного дерева Взаимосвязь между стеками и рекурсией 10 Рис.9. Содержимое неявного стека при рекурсивном симметричном обходе дерева. Обозначение ->60 означает «указатель на узел, содержащий число 60» Рис.10. Симметричный обход поддеревьев узла 20: а) пройдено левое поддерево узла 20; б) пройдено правое поддерево узла 20. Рис.11. Итеративная стратегия обхода
Итеративный обход 11 Рис.12. Содержимое явного стека при итеративном симметричном обходе бинарного дерева
12 Итеративный обход
19052-b-derevo_v_vide_svyazannogo_spiska.ppt
- Количество слайдов: 12

