Форум программистов, компьютерный форум CyberForum.ru

Потеря указателя на корень дерева - C++

Восстановить пароль Регистрация
 
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
10.10.2015, 09:51     Потеря указателя на корень дерева #1
Всем доброго времени суток. У меня есть функция вставки структуры в АВЛ дерево, но при его печати оказывается, что дерево пусто и корень дерева в том числе.
C++
1
2
3
4
5
6
7
8
9
10
11
TNode *Insert(TNode *root, Pair p)
{
    if (!root) /*{std::cout<<238<<std::endl; return new TNode(p);}*/
    {
        root = new TNode(p);
        return root;
    }
    if (strcmp(root->pair.key,p.key)>0)  root->left=Insert(root->left, p);
    else  if (strcmp(root->pair.key,p.key)>0) root->right=Insert(root->right, p);
    return Balance(root);
}
Возвращаемый указатель вполне рабочий, но в сам root ничего не записалось
C++
1
2
3
4
5
6
7
TNode *node;
std::cin>>tmp.key;
std::cin>>tmp.value;
std::cout<<tmp.key<<std::endl;
node = Insert(root,tmp);
std::cout<<root->height<<std::endl; //если это не закомментировать, то на этом месте программа вылетает
std::cout<<node->pair.value<<std::endl;//выводит правильное значение
Помогите пожалуйста.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1532 / 980 / 238
Регистрация: 05.06.2014
Сообщений: 2,950
10.10.2015, 10:02     Потеря указателя на корень дерева #2
Вас не смущает что в восьмой и девятой строчках идентичные условия?

Добавлено через 5 минут
UPD TNode *node; TNode *node=nullptr;
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
10.10.2015, 10:04  [ТС]     Потеря указателя на корень дерева #3
Это да, когда менял местами аргументы функции strcmp не поменял знаки. Но проблему это не решает.
Renji
1532 / 980 / 238
Регистрация: 05.06.2014
Сообщений: 2,950
10.10.2015, 10:10     Потеря указателя на корень дерева #4
node во втором куске кода не инициализирован и содержит мусор.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
10.10.2015, 10:13     Потеря указателя на корень дерева #5
Цитата Сообщение от Renji Посмотреть сообщение
не инициализирован и содержит мусор.
Цитата Сообщение от mishula Посмотреть сообщение
C++
1
node = Insert(root,tmp);
перед использованием ему присваивется значение
Renji
1532 / 980 / 238
Регистрация: 05.06.2014
Сообщений: 2,950
10.10.2015, 10:15     Потеря указателя на корень дерева #6
Да, пардон. Тогда смотреть с отладчиком работу кода Balance.
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
10.10.2015, 10:18  [ТС]     Потеря указателя на корень дерева #7
К сожалению, добавление nullptr проблему не решило.

Добавлено через 3 минуты
Тут дело до balance не доходит, так как на добавлении в корень все валится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2015, 10:20     Потеря указателя на корень дерева
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Renji
1532 / 980 / 238
Регистрация: 05.06.2014
Сообщений: 2,950
10.10.2015, 10:20     Потеря указателя на корень дерева #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ага, вижу. node = Insert(root,tmp); root = Insert(root,tmp); или Insert(TNode *&root, Pair p)
Yandex
Объявления
10.10.2015, 10:20     Потеря указателя на корень дерева
Ответ Создать тему
Опции темы

Текущее время: 17:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru