Skip to content

Binary Tree

В этой теме мы узнаем:

  • что такое Binary Tree и зачем нужны бинарные деревья;
  • как реализовать пользовательское двоичное дерево поиска в Go;
  • каковы основные функциональные возможности Binary Tree (вставка узла, обход дерева, получение минимального и максимального элемента).

Что такое дерево?

Дерево — это структура данных, используемая для представления иерархии. Оно обычно состоит из нескольких небольших деревьев. Каждое дерево представляе~ю~т собой набор узлов, соединенных ребрами. Каждый узел содержит данные определенного типа. Бинарное дерево — это тип дерева, который по определению может иметь максимум два дочерних узла.

Дерево бинарного поиска

Примечание: бинарное дерево может иметь любой порядок узлов, но двоичное дерево поиска следует определенной последовательности, упорядочивая  свои узлы.

Зачем нужны бинарные деревья?

Представим, что мы находим элемент в массиве. Временная сложность с линейной структурой, такой как массив равна O(n), где n увеличивается по мере возрастания числа элементов для поиска.

Предположим, что данные представлены в виде древовидной структуры. Тогда число шагов, необходимых для нахождения значения, уменьшается более чем наполовину: логарифмическая временная сложность — O(logN) . Это происходит потому, что всякий раз, когда значение вставляется в двоичное дерево поиска, добавление узла упорядочено: значение левого дочернего элемента меньше значения родительского узла, а значение правого дочернего элемента больше значения родительского узла.

Таким образом, когда мы ищем значение, если оно меньше корня, мы игнорируем всю правую часть дерева и рекурсивно повторяем поиск в левой части дерева.

Терминология

  • Узел. Каждый узел содержит указатели на левый и правый дочерний элемент и некоторые данные, связанные с узлом.
  • Лист — это узел без потомков.
  • Корень — это самый верхний узел бинарного дерева.
  • Ребро связывает два узла вместе.