@Artyom_Kopan

Как в двоичном дереве поиска найти минимальный элемент, больший данного?

Моя функция выглядит так (она работает неправильно, если в левом поддереве есть элементы, большие, чем key; Здесь tree->left - левое поддерево, tree->right - правое; Value - пользовательский тип данных; comparator - функция сравнения):
Value getUpperBound(Tree* tree, Value key)
{
    if (!tree)
        return wrapNone();
    return tree->comparator(tree->key, key) > 0 ? tree->key : getUpperBound(tree->right, key);
}
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Надо, как в бинарном поиске - идти или в левое или в правое поддерево. Если пошли в левое поддерево, то надо проверить, что вернула рекурсивная функция - если там не было больших элементов, то надо вернуть значение в текущей вершине.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы