Добавил:
Developerrnrn Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Деревья.pptx
Скачиваний:
16
Добавлен:
22.03.2023
Размер:
697.49 Кб
Скачать

Двоичное

дерево

Троичное дерево

Граф – это набор узлов с набором ребер, которые соединяют пары отдельных узлов (причем любую пару узлов соединяет только одно ребро).

Последовательность ребер, ведущих от одного узла до другого, когда ни один узел не посещается дважды, называется простым путём.

Граф является связным (connected), если существует простой путь, связывающий любую пару узлов.

Простой путь, у которого первый и последний узел совпадают, называется циклом (cycle).

Каждое дерево считается графом. Но граф считается деревом, если он удовлетворяет любому из следующих четырёх условий:

Граф имеет N-1 ребер и ни одного цикла.

Граф имеет N-1 ребер и является связным.

Только один простой путь соединяет каждую пару вершин в графе.

Граф является связным, но перестает быть таковым при удалении любого ребра.

Любое из этих условий – необходимое и достаточное условие для выполнения остальных трёх.

МАТЕМАТИЧЕСКИЕ

СВОЙСТВА

БИНАРНЫХ

ДЕРЕВЬЕВ

Бинарное дерево с N внутренними узлами имеет N+1 внешних узлов.

Бинарное дерево с N внутренними узлами имеет 2N связей: N-1 связей с внутренними узлами и N+1 связей с внешними узлами.

Длина внешнего пути бинарного дерева, имеющего N внутренних узлов, на 2N больше длины внутреннего пути.

Высота бинарного дерева с N внутренними узлами не меньше lgN и не больше N-1

Длина внутреннего пути бинарного дерева с N внутренними узлами не меньше чем N lg(N/4) и не превышает N(N-1)/2

ОБХОД ДЕРЕВА

Прямой обход (сверху вниз), при котором мы посещаем узел, а затем левое и правое поддеревья.

Поперечный обход (слева направо), при котором мы посещаем левое поддерево, затем узел, а затем правое поддерево.

Обратный обход (снизу вверх), при котором мы посещаем левое и правое поддеревья, а затем узел.

Прямой обход дерева (рекурсивная реализация)

void traverse (link h, void visit(link))

{

if (h == 0) return; visit(h); traverse(h->l, visit); traverse(h->r, visit);

}

Прямой обход (нерекурсивная реализация)

void traverse (link h, void visit(link))

{STACK<link> s(max); s.push (h);

While (! s.empty () )

{

visit(h = s.pop () );

if (h->r ! = 0) s.push(h->r); if (h->1 ! = 0) s.push(h->1);

}

}

ДЕРЕВЬЯ

БИНАРНОГО

ПОИСКА

Соседние файлы в папке Лекции