Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
6 / 5 / 2
Регистрация: 05.10.2021
Сообщений: 380

Функция, которая возвращает адрес нужного элемента в дереве

17.11.2022, 12:02. Показов 1099. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция Search должна возвращать адрес узла, который находится по ключу, чтобы потом информационное поле данного узла перенастроить на другое значение в ф-ии main. Нужный узел программа находит, но потом не работает ничего.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
struct Node
{
    int data;
    Node* left;
    Node* right;
};
void addTree(Node** b_root, int num) //branch_root
{
    if (!(*b_root))
    {
        Node* ptr = new Node;
        ptr->data = num;
        ptr->left = 0;
        ptr->right = 0;
        *b_root = ptr;
    }
    else if (num < (*b_root)->data) addTree(&((*b_root)->left), num);
    else addTree(&((*b_root)->right), num);
}
void view_CLR(Node* p_root)
{
    if (p_root)
    {
        printf("%i", p_root->data);
        view_CLR(p_root->left);
        view_CLR(p_root->right);
    }
}
Node* Search(Node* ptr, int key)
{
    if (ptr != 0)
    {
        if (ptr->data == key) return ptr;
        Search(ptr->left, key);
        Search(ptr->right, key);
    }
}
int main()
{
    Node* root = 0;
    const int n = 7;
    int mas[n] = { 7,9,5,4,6,0,1 };
    for (int i =0; i< n;i++)addTree(&root, mas[i]);
    view_CLR(root);
    printf("\n\n");
    Node* ptr_main = Search(root, 6);
    ptr_main->data = 8;
    view_CLR(root);
    printf("\n\n");
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.11.2022, 12:02
Ответы с готовыми решениями:

Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
Здравствуйте! Помогите, пожалуйста, в написании функции ,которая получает указатель на корень дерева и возвращает длинну самой длинной...

функция, которая на входе получает -адрес, а возвращает запрос (query)
Как правильно написать функцию, которая на входе получает URL-адрес, а возвращает запрос (query)???

Класс Массив: почему функция возвращает адрес элемента, а не его значение?
подскажите, пожалуйста: почему функция возвращает адрес элемента, а не его значение? template &lt;typename T&gt; T...

22
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.11.2022, 12:52
Студворк — интернет-сервис помощи студентам
Unomuno
Моя изначальная позиция была, дать вам понять суть вашей ошибки в коде.
Усвоив ее, позже вы бы ее не повторяли.
Так как вы уперлись рогом и все "стратили", то и сомнительно что усвоили,
Плюс превратили тему в очередную помойную яму.
По причинах,
- что вам видней как код писать (без return же работает)
- что вам нужен только код, а причины ваших ошибок, это проблемы индейцев.
0
6 / 5 / 2
Регистрация: 05.10.2021
Сообщений: 380
17.11.2022, 21:25  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Дальнейшие наставления бессмысленны. Человек не готов учится.
Unomuno, функция на ваш "уровень"

C++
1
2
3
4
5
6
7
8
9
10
11
Node* Search(Node* ptr, int key)
{
    Node * res = nullptr;
    if (ptr != 0)
    {
        if (ptr->data == key) return ptr;
        res = Search(ptr->left, key);
        res = res ? res : Search(ptr->right, key);
    }
    return res;
}
Фрагмент кода в main :
C++
1
2
3
    Node* ptr_main = Search(root, 6);
    if (ptr_main)
        ptr_main->data = 8;
Спасибо! Скажите, пожалуйста, а в каких случаях res != res ? Я так понимаю, когда возвращается значение res, то res = res, при каком условии вызывается Search(ptr->right, key)?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.11.2022, 21:55
Цитата Сообщение от Unomuno Посмотреть сообщение
при каком условии вызывается Search(ptr->right, key)?
Если res - NULL, иначе элемент найден, и искать дальше не нужно, просто возвращаем результат "наверх".

Добавлено через 1 минуту
Можно переписать вот так (надеюсь нигде не ошибся)
C++
1
res = ( (res != NULL) ? res : Search(ptr->right, key) );
Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
NULL
Я всегда использую nullptr.
А тут уже закрутился...
Ну суть понятна ?

Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Можно переписать вот так
Или еще понятней :
C++
1
2
if (res == NULL) // элемент еще не найден
   res = Search(ptr->right, key); // продолжаем поиск в правой ветке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2022, 21:55

Функция, которая возвращает адрес минимального среди отрицательных элементов множества
Задано множество из n целых чисел. Число n произвольное. 3. Напишите функцию, которая возвращает адрес минимального среди отрицательных ...

Функция, которая возвращает список булевских значений четности каждого элемента заданного элемента целочисленного списка
Определите рекурсивные функции для решения задачи. НЕ РЕКОМЕНДУЕТСЯ использовать функции высших порядков. Сама задача: Возвращает список...

Функция, которая возвращает индекс элемента
Написать функция, что возвращает индекс элемента, начиная с которого подстрока входит в строку. Спасибо.

Функция, которая возвращает индекс первого элемента
Дан массив, упорядоченный по убыванию { 16, 13, 12, 8,5,4,1,-1,-2,-5}. Написать функцию, которая возвращает индекс первого элемента,...

Функция возвращает адрес , как передать этот адрес другой функции ?
const int max = 5; double * fill_array(double, int); void show_array(const double, double *); // как передать этой функции в...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru