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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 85
#1

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

10.10.2015, 09:51. Просмотров 177. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток. У меня есть функция вставки структуры в АВЛ дерево, но при его печати оказывается, что дерево пусто и корень дерева в том числе.
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2015, 09:51     Потеря указателя на корень дерева
Посмотрите здесь:

Потеря значений указателя - C++
Вообщем столкнулся с интересной проблемой. При добавлении больше одного значения, на строке 123-124 значения указателя выводятся корректно,...

Как удалить корень дерева? - C++
пример... двоичное дерево состоит из корня с левым и правым узлом ... а теперь ,как удалить корень и связать два эти узла (к примеру левый...

Создание дерева методом вставки в корень - C++
Реализация BST-деревьев Создание дерева методом вставки в корень. Печать элементов дерева в упорядоченном виде.

Как открыть корень дерева диска на интересующей папке? - C++
Помогите открыть корень дерева диска на интересующей папке?

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

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,551
10.10.2015, 10:02     Потеря указателя на корень дерева #2
Вас не смущает что в восьмой и девятой строчках идентичные условия?

Добавлено через 5 минут
UPD TNode *node; TNode *node=nullptr;
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 85
10.10.2015, 10:04  [ТС]     Потеря указателя на корень дерева #3
Это да, когда менял местами аргументы функции strcmp не поменял знаки. Но проблему это не решает.
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,551
10.10.2015, 10:10     Потеря указателя на корень дерева #4
node во втором куске кода не инициализирован и содержит мусор.
Kerry_Jr
Модератор
Эксперт PHP
2167 / 1963 / 685
Регистрация: 14.05.2014
Сообщений: 5,745
Записей в блоге: 1
Завершенные тесты: 5
10.10.2015, 10:13     Потеря указателя на корень дерева #5
Цитата Сообщение от Renji Посмотреть сообщение
не инициализирован и содержит мусор.
Цитата Сообщение от mishula Посмотреть сообщение
C++
1
node = Insert(root,tmp);
перед использованием ему присваивется значение
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,551
10.10.2015, 10:15     Потеря указателя на корень дерева #6
Да, пардон. Тогда смотреть с отладчиком работу кода Balance.
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 85
10.10.2015, 10:18  [ТС]     Потеря указателя на корень дерева #7
К сожалению, добавление nullptr проблему не решило.

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

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... - C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...

Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] - C++
Задан массив из 3 указателей Bitmap, по адресу Bitmap необходимо записать 480*640 элементов из массива Bitmap. В последнем цикле for выдает...

Потеря памяти - C++
Здравия желаю!:) Вопрос: Возможна ли такая конструкция? #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; char...

Потеря памяти в программе - C++
Подскажите пожалуйста, как отловить в каком месте происходит потеря памяти? Программа считает, но если открыть диспетчер задач, то файл...


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

Или воспользуйтесь поиском по форуму:
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,551
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     Потеря указателя на корень дерева
Ответ Создать тему
Опции темы

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