Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
4 / 4 / 3
Регистрация: 27.11.2016
Сообщений: 59
1

Найти второй максимум в двоичном дереве поиска

17.08.2017, 20:41. Показов 4659. Ответов 2
Метки нет (Все метки)

Собственно, в задаче не проходит один тест. Условие:
Выведите второй по величине элемент в построенном дереве. Гарантируется, что такой найдется.
Функция построения дерева работает корректно. В случае, если один элемент во входных данных повторяется, он заносится один раз в дерево. Код:
1) Сама структура данных:
C++ (Qt)
1
2
3
4
5
6
7
8
typedef struct Node node;
 
struct Node
{
    int data;
    struct Node* left;
    struct Node* right;
};
2) Функция, находящая максимум в дереве, root- указатель на корень:
C++ (Qt)
1
2
3
4
5
6
7
8
int find_max(node* root)
{
    while(root->right != NULL)
    {
        root = root->right;
    }
    return root->data;
}
3) Собственно, функция, решающая задачу:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
int second_maximum(node* root)
{
    node* buf = root;
    if(buf->right == NULL) {return buf->left->data;}
    while(buf->right->right)
    {
        buf = buf->right;
    }
    if(buf->right->left == NULL) {return buf->data;}
    return max(buf->data, find_max(buf->right->left));
}
Буду благодарен за помощь. Какой случай не обрабатывается?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2017, 20:41
Ответы с готовыми решениями:

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

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

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

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

2
68 / 67 / 52
Регистрация: 28.10.2015
Сообщений: 388
17.08.2017, 21:22 2
Лучший ответ Сообщение было отмечено TheJazzMandono как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
int seacrh_second_max(tree*tr)
{
    tree*temp = tr;
    while (temp->r != nullptr)
    {
        if (temp->r->r == nullptr)
            return temp->value;
        temp = temp->r;
    }
    return temp->l->value;
}
0
4 / 4 / 3
Регистрация: 27.11.2016
Сообщений: 59
17.08.2017, 21:36  [ТС] 3
А в чем ошибка в моем коде? Какой тест ломает программу?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2017, 21:36

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

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

Найти второй максимум бинарного дерева поиска
Прошу написать какие-нибудь извращенные входные данные для бинарного дерева поиска. Не проходит 7...

Написать функцию поиска элемента X в двоичном дереве поиска
Написать функцию поиска элемента X в двоичном дереве поиска.

Алгоритм поиска числа всех вершин высоты N в двоичном дереве
Добрый день. Нужно придумать эффективуюю программу(алгоритм) поиска числа всех вершин высоты N в...

Найти максимальный элемент в двоичном дереве
Помогите решить задачку:найти максимальный элемент в двоичном дереве. Шаблон уже есть ,мне нужно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.