Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Структуры данных - лекция: двоичное дерево

Anton
January 11, 2025

Структуры данных - лекция: двоичное дерево

Лекция курса "Структуры данных"
Двоичное дерево (бинарное дерево - binary tree)

- Структура хранения элементов
- Добавление элемента
- Поиск элемента
- Несбалансированное vs сбалансированное дерево
- Удаление элемента
- Применение: TreeMap, TreeSet

Anton

January 11, 2025
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Двоичное дерево • Хранит числа или элементы, для которых определена

    операция сравнения (больше/меньше/равно) • Val2 < Val1 < Val3 • у каждого узла два ребенка — левый и правый • левый меньше, правый больше. • Корень • Родительский элемент • Дочерний элемент • Лист (нет дочерних элементов)
  2. Поиск • Найдем «2» • Двоичное дерево: 4 операции сравнения

    • Список (несортированный): от 1 до 8 сравнений
  3. Несбалансированное дерево • 8 элементов • Поиск (несбалансированное): от 1

    до 8 сравнений • Сбалансированное: 1 — 4 сравнения
  4. • N = 100 — количество элементов • K —

    количество уровней дерева (сколько раз делим количество элементов на 2) • K max = log 2 (N) — сложность поиска (максимальное количество операций сравнения) 2K≤N 2K≤2log 2 (N) K≤log 2 (N)
  5. • N = 1 млн. элементов • K max ≈

    20 • Поиск в несбалансированном дереве: 1 млн. операций сравнения • Поиск в сбалансированном дереве: 20 операций сравнения
  6. • N = 2 млн. элементов • K max ≈

    20+1=21 • Поиск в несбалансированном дереве: 2 млн. операций сравнения • Поиск в сбалансированном дереве: 20+1=21 операция сравнения
  7. Удаление элемента • Найти элемент • Если лист => del

    • Если есть один дочерний элемент => ставим его на место удаленного • Если два дочерних элемента - удалить элемент - ставим на его место вершину правой ветки - левую ветку присоединяем к самому нижнему листу слева
  8. Итого есть: • Хранение • Добавление • Поиск • Удаление

    Дополнительно: • Алгоритм обхода • Нормализация несбалансированного дерева
  9. List ? • Доступ по индексу (X) • Повторяющиеся элементы

    (X) • Элементы без операции сравнения (X) • Вывод: список поверх двоичного дерева не сделать
  10. Map ? • Запрет повторяющихся ключей (OK) • Храним пары

    ключ-значение • Ключ — элемент двоичного дерева • java.util.TreeMap
  11. Set ? • Запрет на повторяющиеся значения (OK) • Возможно,

    придется реализовать механизм сравнения • java.util.TreeSet
  12. Задание • На Java реализовать двоичное дерево • Добавление •

    Поиск • Удаление • Элементы — числа • Демо: пошаговое выполнение с просмотром внутреннего состояния объекта в режиме отладки IDE: точки останова (брейкпоинты), выполнение по шагам