Что такое дерево бинарного поиска?
Бинарное дерево поиска — это расширенный алгоритм, используемый для анализа узла, его левой и правой ветвей, которые смоделированы в древовидной структуре и возвращают значение. BST разработан на основе архитектуры основного алгоритма двоичного поиска; следовательно, он обеспечивает более быстрый поиск, вставку и удаление узлов. Это делает программу действительно быстрой и точной.
В этом уроке по структуре данных вы узнаете:
- Что такое дерево бинарного поиска?
- Атрибуты бинарного дерева поиска
- Зачем нам нужно дерево двоичного поиска?
- Типы бинарных деревьев
- Как работает дерево бинарного поиска?
- Важные условия
Атрибуты бинарного дерева поиска
BST состоит из нескольких узлов и состоит из следующих атрибутов:
- Узлы дерева представлены в родительско-дочерних отношениях
- Каждый родительский узел может иметь ноль дочерних узлов или максимум два подузла или поддерева слева и справа.
- Каждое поддерево, также известное как двоичное дерево поиска, имеет подветвия справа и слева от себя.
- Все узлы связаны парами ключ-значение.
- Ключи узлов, присутствующих в левом поддереве, меньше, чем ключи их родительского узла.
- Аналогично, ключи левых узлов поддерева имеют меньшие значения, чем ключи их родительских узлов.
- Существует главный узел или родительский уровень 11. Под ним находятся левый и правый узлы / ветви со своими собственными значениями ключей.
- Правое поддерево имеет значения ключа больше, чем родительский узел
- Левое поддерево имеет значения, чем родительский узел
Зачем нам нужно дерево двоичного поиска?
- Двумя основными факторами, которые делают бинарное дерево поиска оптимальным решением любых реальных проблем, являются Скорость и Точность.
- Из-за того, что бинарный поиск имеет ветвистый формат с отношениями родитель-потомок, алгоритм знает, в каком месте дерева нужно искать элементы. Это уменьшает количество сравнений ключ-значение, которые должна выполнить программа, чтобы найти нужный элемент.
- Кроме того, в случае, если элемент для поиска больше или меньше, чем родительский узел, узел знает, какую сторону дерева искать. Причина в том, что левое поддерево всегда меньше родительского узла, а правое поддерево имеет значения, всегда равные или превышающие родительский узел.
- BST обычно используется для реализации сложного поиска, надежной игровой логики, операций автозавершения и графики.
- Алгоритм эффективно поддерживает такие операции, как поиск, вставка и удаление.
Типы бинарных деревьев
Три вида бинарных деревьев:
- Полное двоичное дерево: все уровни в деревьях полны возможных исключений последнего уровня. Точно так же все узлы заполнены, направляя крайний левый.
- Полное двоичное дерево: все узлы имеют 2 дочерних узла, кроме листа.
- Сбалансированное или совершенное двоичное дерево: в дереве все узлы имеют двух дочерних элементов. Кроме того, уровень каждого подузла одинаковый.
Как работает дерево бинарного поиска?
Дерево всегда имеет корневой узел и дополнительные дочерние узлы, слева или справа. Алгоритм выполняет все операции, сравнивая значения с корневым и его дальнейшими дочерними узлами в левом или правом поддереве соответственно.
Зависит от того, какой элемент будет вставлен, найден или удален, после сравнения алгоритм может легко удалить левое или правое поддерево корневого узла.
BST в первую очередь предлагает следующие три типа операций для вашего использования:
- Поиск: поиск элемента из двоичного дерева
- Вставить: добавляет элемент в двоичное дерево
- Удалить: удалить элемент из двоичного дерева
Каждая операция имеет свою структуру и метод выполнения / анализа, но наиболее сложной из них является операция удаления.
Операция поиска
Всегда инициируйте анализ дерева в корневом узле, а затем двигайтесь дальше к правому или левому поддереву корневого узла, в зависимости от того, какой элемент должен быть меньше или больше корневого.
- Элемент для поиска — 10
- Сравните элемент с корневым узлом 12, 10 <12, следовательно, вы переместитесь в левое поддерево. Не нужно анализировать правильное поддерево
- Теперь сравните 10 с узлом 7, 10> 7, поэтому перейдите к правому поддереву
- Затем сравните 10 со следующим узлом, который является 9, 10> 9, посмотрите в дочернем поддереве справа
- 10 соответствует значению в узле, 10 = 10, возвращает значение пользователю.
Операция вставки
Это очень прямолинейная операция. Сначала вставляется корневой узел, затем сравнивается следующее значение с корневым узлом. Если значение больше корневого, оно добавляется к правому поддереву, а если оно меньше корневого, оно добавляется к левому поддереву.
- Существует список из 6 элементов, которые необходимо вставить в BST по порядку слева направо
- Вставьте 12 в качестве корневого узла и сравните следующие значения 7 и 9 для вставки соответственно в правое и левое поддерево.
- Сравните остальные значения 19, 5 и 10 с корневым узлом 12 и разместите их соответствующим образом. 19> 12 поместите его как правого ребенка 12, 5 <12 и 5 <7, следовательно, поместите его как левого ребенка 7 лет.
- Теперь сравните 10, 10 — это <12, а 10 -> 7 и 10 -> 9, поместите 10 как правильное поддерево 9.
Операции удаления
Удалить является наиболее продвинутым и сложным среди всех других операций. В BST обрабатывается несколько дел.
- Случай 1 — Узел с нулевыми дочерними элементами: это самая простая ситуация, вам просто нужно удалить узел, у которого больше нет дочерних элементов справа или слева.
- Случай 2 — Узел с одним дочерним узлом: после удаления узла просто подключите его дочерний узел с родительским узлом удаленного значения.
- Пример 3 Узел с двумя детьми: это самая сложная ситуация, и она работает по следующим двум правилам
- 3a — В Предшественнике заказа: вам нужно удалить узел с двумя дочерними элементами и заменить его наибольшим значением в левом поддереве удаленного узла.
- 3b — В порядке преемника: необходимо удалить узел с двумя дочерними элементами и заменить его наибольшим значением в правом поддереве удаленного узла
- Это первый случай удаления, при котором вы удаляете узел, у которого нет дочерних элементов. Как видно из диаграммы, 19, 10 и 5 не имеют детей. Но мы удалим 19.
- Удалите значение 19 и удалите ссылку из узла.
- Посмотреть новую структуру BST без 19
- Это второй случай удаления, при котором вы удаляете узел, у которого есть 1 дочерний элемент, как вы можете видеть на диаграмме, что у 9 есть один дочерний элемент.
- Удалите узел 9, замените его дочерним 10 и добавьте ссылку с 7 на 10.
- Посмотреть новую структуру BST без 9
- Здесь вы будете удалять узел 12, который имеет двух детей
- Удаление узла будет происходить на основе правила предшественника по порядку, что означает, что его заменит самый большой элемент в левом поддереве из 12.
- Удалите узел 12 и замените его на 10, так как это наибольшее значение в левом поддереве.
- Просмотр новой структуры BST после удаления 12
- 1 Удалите узел 12 с двумя дочерними элементами.
- 2 Удаление узла будет происходить на основе правила преемника по порядку, что означает, что его заменит самый большой элемент в правом поддереве из 12
- 3 Удалите узел 12 и замените его на 19, так как это наибольшее значение в правом поддереве.
- 4 Просмотр новой структуры BST после удаления 12
Важные условия
- Вставить — вставляет элемент в дерево / создает дерево.
- Поиск — поиск элемента в дереве.
- Preorder Traversal — обход дерева по предзаказу.
- Inorder Traversal — обход дерева по порядку.
- Postorder Traversal — обход дерева по порядку заказа.
Резюме
- BST — это алгоритм продвинутого уровня, который выполняет различные операции на основе сравнения значений узлов с корневым узлом.
- Любая из точек в иерархии родитель-потомок представляет узел. По крайней мере один родительский или корневой узел остается постоянно.
- Есть левое поддерево и правое поддерево. Левое поддерево содержит значения, которые меньше корневого узла. Однако правое поддерево содержит значение, которое больше корневого узла.
- Каждый узел может иметь ноль, одного или двух дочерних элементов.
- Двоичное дерево поиска облегчает основные операции, такие как поиск, вставка и удаление.
- У удаления, являющегося наиболее сложным, есть несколько случаев, например, узел без дочернего элемента, узел с одним дочерним элементом и узел с двумя дочерними элементами.
- Алгоритм используется в реальных решениях, таких как игры, автозаполнение данных и графика.