
polevoy_cpp_2012_spring_lecture_11
.pdf
Послойно
• узел |
корень |
– указатель на первого ребенка
– указатель на
брата/родителя
– данные
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 |

Баланс в дереве (иллюстрация)
|
|
3 |
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
||||
1 |
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
5 |
9 |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
9 |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сбалансированное несбалансированное
21.04.2012 |
cppNewb.ru |
67 |

Узел дерева (послойно)
struct STNode
{
STNode* m_pNext;
STNode* m_pChild;
T m_data;
};
21.04.2012 |
cppNewb.ru |
68 |

Вставка поддерева (послойно) |
|
|
21.04.2012 |
cppNewb.ru |
69 |

Вставка поддерева (список детей)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21.04.2012 |
|
|
|
|
|
|
|
cppNewb.ru |
70 |