ВНИМАНИЕ Для заказа программы на двоичное поисковое дерево пишите на мой электронный адрес proglabs@mail.ru

Посмотрим на следующее бинарное дерево поиска, состоящие из $15$ узлов. Ключами вершин выступают целые числа ( в данном случае даже натуральные числа ).

стандартное поисковое бинарное дерево

➡ Мне нужен алгоритм поиска элемента в бинарном дереве. Сразу нужно подумать о том, что должна возвращать поисковая функция!

Очевидно, что для поиска нужно указать значение ключа. В результате поиска можно получить только $2$ ситуации:

узел, имеющий заданное поисковое значение ключа, найден в дереве дерево не содержит узла с заданным поисковым ключевым значением

1 ситуация
Если вершина с заданным поисковым ключом обнаружена в дереве, то надо вернуть указатель на эту вершину. Это позволит после поиска производить над ней нужную обработку, например, вывести ключ или данные на экран ( или в файл ), или изменить нужные данные на новые ( обновить информацию в узле ). С этим разобрались!

2 ситуация
Если вершина с заданным поисковым ключом не обнаружена в дереве, то следует вернуть нулевой указатель ( в языке программирования С — NULL-указатель, например ). С этим тоже разобрались!

➡ Да, еще нужно помнить о таком моменте: я рассматриваю бинарные деревья поиска, которые не содержит дублирующих узлов по ключу, то есть все вершины имеют уникальные ключевые значения.

Допустим, я хочу найти узел с ключом равным $56$. Проверим визуально, содержит ли заданное дерево вершину с этим ключом.

содержит ли бинарное дерево поиска узел с ключом 56Видно, что, да, содержит. Искомая вершина выделена желтым цветом.

 

 

Отследим траекторию движения от корня дерева до искомой вершины с ключом $56$.траектория до искомой вершины при поиске по бинарному дереву

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

# Сравниваемые ключи Направление спуска
1 $56 > 22$ вправо
2 $56 < 91$ влево
3 $56 > 44$ вправо
4 $56 > 45$ вправо
5 $56 < 62$ влево
7 $56 = 56$ узел найден

💡 Нужно помнить о том, что рекурсивная функция должна вернуть указатель на найденный узел, а не указатель на корень дерева.

 

 

Допустим, сейчас я хочу найти в этом двоичном поисковом дереве узел с ключом равным $30$. Посмотрим, к какому результату приведет этот поиск.поиск узла, которого нет в бинарном дереве поиска

# Сравниваемые ключи Направление спуска
1 $30 > 22$ вправо
2 $30 < 91$ влево
3 $30 < 44$ влево
4 $30 > 23$ вправо
5 NULL узел не найден

А это моя программная реализация на языке «чистый» Си рекурсивной функции поиска элемента в бинарном дереве по ключу:

Пишите в комментариях, с какими типами поиска элементов в двоичном дереве вы сталкивались на практике. А также задавайте уточняющие вопросы.

ВНИМАНИЕ Для заказа программы на двоичное поисковое дерево пишите на мой электронный адрес proglabs@mail.ru