- •Определение класса
- •Пример (точка)
- •Оператор вывода (пример)
- •Параметр шаблона по умолчанию (пример)
- •Где перехватывать исключения?
- •Гарантии безопасности исключений
- •Базовые операции
- •Виртуальная функция
- •Использование virtual
- •Массив, как диапазон
- •Контейнер
- •Свойства элемента контейнера
- •Заголовочные файлы
- •Доступ к элементам list
- •Размеры list
- •Доступ к элементам map
- •Очередь с приоритетом
- •Дэк (двусвязная очередь)
- •Матрица (в математике)
- •Атд “матрица”
- •Дерево (доп. Определения)
- •Узел дерева (доп. Определения)
- •“Родственные отношения”
- •“Родственные отношения” (иллюстрация)
- •Баланс в дереве (иллюстрация)
- •Std::less (пример функтора)
- •Std::find_if (пример алгоритма)
- •Функциональные адаптеры
- •Производящая функция
- •Производящие функции для функциональных адаптеров
Дерево (доп. Определения)
корень – выделенная вершина дерева
поддерево – любое дерево, корень которого не совпадает с корнем исходного дерева
21.04.2012
cppNewb.ru 52
Узел дерева (доп. Определения)
степень — количество поддеревьев узла
уровень — длина пути от корня до узла рекурсивное определение:
уровень корня дерева T равен 0
уровень любого другого узла на единицу больше, чем уровень корня ближайшего поддерева дерева T, содержащего данный узел
21.04.2012
cppNewb.ru 53
“Родственные отношения”
родитель, родительский узел
ребенок, потомок
подчиненный по отношению к родителю узел
предок
брат
братья имеют общего родителя
21.04.2012
cppNewb.ru 54
“Родственные отношения” (иллюстрация)
братья
c d
дети для a
b e f
a общий
предок
21.04.2012
cppNewb.ru 55
N-арное дерево
степень внутреннего узла не превышает N
степень внутреннего узла N
21.04.2012
cppNewb.ru 56
N-арное дерево
бинарное (двоичное) дерево (N=2)
тернарное дерево (N=3)
квадро-дерево (N=4)
21.04.2012
cppNewb.ru 57
Радиальное подчинение
(иллюстрация)
e
d a
b f c корень
21.04.2012
cppNewb.ru 58
Представление дерева в памяти
список указателей на детей
список индексов (в массиве) детей
“послойно”
список ребер
матрица отношений
21.04.2012
cppNewb.ru 59
Список указателей
узел
число детей
указатели на детей
данные
корень
21.04.2012
cppNewb.ru 60
Послойно
узел
указатель на первого ребенка
указатель на брата/родителя
данные
21.04.2012
корень
cppNewb.ru 61
Список ребер
узлы храним в массиве
ребро – пара индексов
<родитель, ребенок>
ребра храним упорядоченно
(по родителю)
21.04.2012
cppNewb.ru 62
Дерево (операции)
создание
уничтожение
добавление поддерева
удаление поддерева
навигация
изменение корня
21.04.2012
cppNewb.ru 63
Навигация по дереву
проверить наличие родителя
перейти к родителю
проверить наличие детей
перейти к ребенку
перейти к брату
перейти к корню дерева
21.04.2012
cppNewb.ru 64
Обход дерева
поиск заданного узла в дереве
получение списка всех узлов
«в ширину»
послойно, начиная от корня
«в глубину»
все потомки текущей вершины (для каждой)
21.04.2012
cppNewb.ru 65
Сбалансированное дерево
Высота двоичного дерева – максимальный уровень его листьев (-1 для пустого дерева).
Баланс узла – разность высот левого и правого поддерева.
Сбалансированным бинарным деревом является такое бинарное дерево, у которого абсолютное значение баланса каждого узла меньше или равно 1.
21.04.2012
cppNewb.ru 66