Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции С++.docx
Скачиваний:
4
Добавлен:
22.09.2019
Размер:
6.95 Mб
Скачать

Дерево (доп. Определения)

  • корень – выделенная вершина дерева

  • поддерево – любое дерево, корень которого не совпадает с корнем исходного дерева

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