Содержание

Бинарное дерево поиска

Бинарное дерево поиска

Бинарное дерево поиска поддерживает три операции:

  • вставка элемента
  • удаление элемента
  • поиск элемента

Поиск элемента

У нас есть: дерево T и значние K

Задача: Найти, представлен ли элемент K в дереве T – вернуть узел с этим элементом

Алгоритм

  • Проверить , если дерево T пустое – вернуть что не найден элемент
  • Проверить что текущий узел X равен K:
    • Если X==K – вернуть узел
    • Если X>K – запустить алгоритм рекурсивно от правого поддерева
    • Если X<K – запустить алгоритм рекурсивно от левого поддерева

Имплементация

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func searchBST(root *TreeNode, val int) *TreeNode {
    if root == nil {
        return nil
    }
    
    if root.Val == val {
        return root
    }
    
    if root.Val > val {
        return searchBST(root.Left, val)
    }
    
    return searchBST(root.Right, val)
}