Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
3 / 3 / 5
Регистрация: 21.10.2012
Сообщений: 182
1

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

30.06.2013, 02:28. Показов 5133. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот примерная рекурсивная функция, но я не знаю, как выйти из нее в нужный момент.
C++
1
2
3
4
5
6
7
8
9
10
11
void range(Node *root, int r)
{
    if (root==NULL) return;
    range(root->left, r);
    if(root->key > r) 
       {
          printf("%d\n", root->key); 
          return; //значение найдено, надо здесь выйти из функции, но она рекурсивная, полностью выйти не получается
       }
    range(root->right, r);
}
root - корень дерева
r - заданное значение

Если Вам не нравится моя идея, предложите свою.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2013, 02:28
Ответы с готовыми решениями:

Как найти в двоичном дереве поиска минимальный элемент, превышающий некоторое заданное значение?
Вот примерная рекурсивная функция, но я не знаю, как выйти из нее в нужный момент. void range(Node...

Найти второй максимум в двоичном дереве поиска
Собственно, в задаче не проходит один тест. Условие: Выведите второй по величине элемент в...

Посредством двоичного поиска найти такой минимальный элемент, чтобы выполнялось заданное условие
Даны массивы min и max, отсортированные по невозрастанию и число k. С помощью двоичного поиска...

Найти первый элемент заданного массива, превышающий значение, введённое с клавиатуры
Ребят, честно пытался сам всё сделать, но никак не получается...Может где-то рядом и кручусь, но за...

4
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
30.06.2013, 02:36 2
так ведь в двоичном дереве елементы слева всегда меньше корневого, а справа - больше. поэтому не обязательно ити в обе стороны. просто проверяйте левый узел, если он меньше заданого значения, а корень больше - вы нашли его. если корень меньше - идете вправо.
зы: на ходу придумал. так, что могу ошибатся
1
3 / 3 / 5
Регистрация: 21.10.2012
Сообщений: 182
30.06.2013, 03:44  [ТС] 3
@lowercase, Такой алгоритм не сработает.
Пусть дано такое двоичное дерево поиска. Надо найти минимальный элемент, превышающий, например, 5. Это будет 6. Как оформить этот поиск в программе?
Миниатюры
Как найти в двоичном дереве поиска минимальный элемент, превышающий некоторое заданное значение?  
0
3 / 3 / 3
Регистрация: 06.08.2012
Сообщений: 26
30.06.2013, 12:12 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void range(Node  *root,  int rr)
{
    int value = 2E9;
 
    find(root, rr, &value);
    printf(" %d\n\n", value);
}
    
 
 
void find(Node  *root, int rr, int *v)
{
 
    if(root == 0)
        return;
 
    find(root->left, rr, v);
 
    if(root->data > rr  &&  root->data  <  *v)
        *v = root->data;
 
    find(root->right, rr, v);
}
data - информационное поле в дереве
1
3 / 3 / 5
Регистрация: 21.10.2012
Сообщений: 182
30.06.2013, 15:30  [ТС] 5
@~SERG, Спасибо. А можно ли как-нибудь упростить алгоритм, если у каждого элемента будет указатель на родительский элемент?
0
30.06.2013, 15:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2013, 15:30
Помогаю со студенческими работами здесь

Реализация словаря в двоичном дереве поиска
Помогите,пожалуйста, создать программу на С++! Тема: Релизация словаря в двоичном дереве...

Необъявленный идентификатор в двоичном дереве поиска
Добрый вечер! у меня возникла проблема по программе, составленной по данному условию: ...

Реализация словаря в двоичном дереве поиска
Ребят очень нужно, хотя бы реализацию словаря в C++ ,никак не могу найти

Подсчет уровней в двоичном дереве поиска
каков алгоритм подсчета уровней в двоичном дереве поиска. спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru