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