Обсуждение участника:Novik — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Двоичное дерево поиска)
(нет различий)

Версия 20:03, 24 мая 2015

Двоичное дерево поиска

Проверка двоичного дерева

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

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

Псевдокод:

boolean isSearchTree(Node v):
    if (v.l == null && v.r == null)
        v.max = v.val;
        v.min = v.val;
        return true;
    if (isSearchTree(v.l) && isSearchTree(v.r) && v.l.max < v.val && v.r.min > v.val)
        v.max = v.r.max;
        v.min = v.l.min;
        return true;
    else
        return false;

Поиск максимального поддерева, являющегося целым деревом поиска

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