Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить, располагаются ли буквы в порядке, обратном алфавитному (нужна блок-схема) https://www.cyberforum.ru/ cpp-beginners/ thread2471781.html
Здравствуйте нужна ваша помощь по составлению блок схемы. Если можно с объяснениями блок-схемы. Само задание: Ввести строку букв и определить, располагаются ли буквы в...
C++ Ошибка в коде, как исправить?
Когда запускаю код выдаёт вот такую ошибку 'noexcept' does not name a type Вот сам код: #include <iostream> #include <vector> #include <algorithm> static const double eps = 1e-15; ...
C++ Найти количество строк матрицы сумма элементов которых меньше заданного числа https://www.cyberforum.ru/ cpp-beginners/ thread2471745.html
Разработайте программу для нахождения количества строк двухмерного массива Mas(nxm) , сумма элементов которых меньше заданного числа k
C++ Количество слов начинающихся и заканчивающихся на одну и ту же букву https://www.cyberforum.ru/ cpp-beginners/ thread2471743.html
Разработайте программу для поиска количества слов, начинающихся и заканчивающихся на, одну и ту же букву в строке Str Слова в строке раздельны одним пробелом.
Остановка программы при нажатии клавиши BS C++
Напишите программу, выполняющую вывод на экран произвольных наборов символов до тех пор, пока не будет нажата клавиша BS Заранее спасибо!
C++ Найти минимальное из трех чисел Напишите программу для определения минимального из 3-х чисел. Минимальное из 2-х оформите в виде функции Заранее благодарен! https://www.cyberforum.ru/ cpp-beginners/ thread2471740.html
C++ Поиск в телефонном справочнике Напишите программу, выполняющую поиск в телефонном справочнике, состоящем из 5 записей Заранее благодарен! https://www.cyberforum.ru/ cpp-beginners/ thread2471738.html C++ Определить, сколько досок надо купить, чтобы поставить сплошной забор
Имеется садовый участок, имеющий форму квадрата со стороной А метров. Составьте алгоритм и программу, которая определит, сколько досок надо купить, чтобы поставить сплошной забор. Ширина одной доски...
C++ Обнулить у числа последний бит Дано целое число A и натуральное число i. Обнулите у числа A его последний бит и выведите результат. Заранее благодарен! https://www.cyberforum.ru/ cpp-beginners/ thread2471732.html C++ Табуляция функции Здравствуйте! Не могу правиться с задачей, помогите, пожалуйста. Напишите программу табуляции функции f(x)=sinx на отрезке c шагом 0.5. Заранее благодарен. https://www.cyberforum.ru/ cpp-beginners/ thread2471730.html
Sqlite как подключить к GCC (Windows) C++
Прочитал разные примеры, все описано вроде... Но у меня не получается(( вот код #include "sqlite3.h" int main(int argc, char* argv) { sqlite3 *db; char *zErrMsg = 0; int rc;
C++ Конструктор копирования для шаблонного класса Не могу написать конструктор копирования для следующего класса: template <typename T, typename A = std::allocator<T>> struct vector_base { A allocator_; int size_; int space_; T* ... https://www.cyberforum.ru/ cpp-beginners/ thread2471724.html
4 / 4 / 0
Регистрация: 06.05.2016
Сообщений: 71
0

Указатели в бинарном дереве - C++ - Ответ 13657312

15.06.2019, 13:47. Показов 1406. Ответов 2
Метки (Все метки)

Здравствуйте.
Пытаюсь написать бинарное дерево и столкнулся с непонятным для меня поведением указателей.
Итак, у меня есть класс Node, который реализует узел в дереве
C++
1
2
3
4
5
6
7
8
class Node
{
...
    Node *l; //! Левый узел-потомок
    Node *r; //! Правый узел-потомок
    void setData(const std::string &newData) {data = newData;}
    inline const std::string& value() const {return data;}
}
И есть класс TreeController, который содержит методы для добавления/удаления узла, перехода на потомка и прочее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TreeController
{
...
    Node* createRoot(); //! Создать корневой узел
    Node* rootNode() const {return root;} //! Получить корень
    Node* currentNode() {return current;} //! Получить текущий узел
    inline void setData(const std::string &newData, Node* node) {node->setData(newData); }
    inline const std::string& getData() const {return current->value();}
...
    Node* goToLeftChild(Node* curNode = nullptr);
    Node* createLeftChild(Node* curNode);
...
    Node *root{nullptr};
    Node *current{root};
};
С int main() делаю так:
C++
1
2
3
4
5
6
7
8
 TreeController tc;
    Node *root = tc.createRoot();
    Node *сurrent = tc.currentNode();
    tc.setData("lol", current);
    std::cout << tc.getData();
    tc.createLeftChild(root);
    tc.setData("kek", current);
    std::cout << tc.getData();
Ожидаю, что root::data == lol, а current (который является левым потомком рута)::data == kek,
однако current по прежнему указывает на рута. Вот код метода, в котором создаю нового потомка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Node* TreeController::createLeftChild(Node* curNode)
{
    curNode->createLeftChild();
/*
Этот код содержится в классе Node в методе createLeftChild
    this->l = new Node;
    return l;
*/
    return goToLeftChild(curNode);
/* Код метода goToLeftChild
    if (curNode != nullptr)
        current = curNode;
 
    current = current->leftChild(); // Возвращает указатель на левого потомка
    return current;
*/
}
Теперь сам вопрос: почему current из int main до сих пор указывает на рута, ведь current внутри класса изменил свой адрес.
Пробовал с двойным указателем, но итог не изменился

Вернуться к обсуждению:
Указатели в бинарном дереве C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2019, 13:47
Готовые ответы и решения:

Строки в бинарном дереве
Есть шаблонный класс бинарного дерева. Со числами он работает нормально, но при добавлении строки в...

Поиск в бинарном дереве
Составить рекурсивную функцию для определения первого элемента, у которого совпадают старшая и...

Предок в бинарном дереве
Помогите пожалуйста! Необходимо написать программу, которая для двух вершин дерева определяет,...

Поиск в бинарном дереве
Привет всем! Нужно написать код, с которым в бинарном дереве можно найти заданное пользователем...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2019, 13:47
Помогаю со студенческими работами здесь

Поиск в Бинарном Дереве!
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента....

Разобраться в бинарном дереве
Нашел вот такой вариант построения бинарного дерева. Просьба прокомментировать строки кода...

Количество листьев в бинарном дереве
Задача: Найти количество листьев в дереве. Собственно ввод и вывод дерева есть: #include...

Сумма элементов в бинарном дереве
Требуется реализовать функцию(void findSum(); ) которая определить сумму цифр в значениях тех...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru