Ответ
Бинарный поиск в дереве работает за счет сравнения искомого значения с текущим узлом и рекурсивного спуска в левое или правое поддерево.
Алгоритм:
- Начинаем с корня
- Если искомое значение равно текущему узлу — возвращаем его
- Если меньше — идем в левое поддерево
- Если больше — в правое
- Если дошли до nil — элемента нет
Пример на Go:
type Node struct {
Value int
Left *Node
Right *Node
}
func Search(root *Node, target int) *Node {
if root == nil || root.Value == target {
return root
}
if target < root.Value {
return Search(root.Left, target)
}
return Search(root.Right, target)
}
Сложность: O(log n) в сбалансированном дереве, O(n) в худшем случае (вырожденное дерево).