С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195

Вывод информации об элементе в бинарном дереве из класса

13.10.2022, 15:19. Показов 488. Ответов 12

Студворк — интернет-сервис помощи студентам
Начал изучать классы. Задание прошлой л.р. было создать бинарное дерево через структуры, сейчас перенести его на классы. Проблема в чем: При вызове функции DisplayTree выводит только адрес, остальные поля пустые.
Код:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//Класс, отвечающий за структуру данных, содержащий:
//a. Поле, которое будет являться переменной-указателем на стартовый элемент структуры данных,
//б. Методы, отвечающее за базовые функции, относящиеся непосредственно к структуре данных.
//в. Конструкторы (по умолчанию, параметрический, копирования), деструктор.
class Tree
{
    friend class TreeElements;
public:
    Tree() // конструктор по умолчанию
    {
        cout << "Объект типа дерево создан" << endl;
        root = NULL;
    }
    Tree(Tree *root) // параметрический конструктор
    {
        cout << "Объект типа дерево создан (параметрический конструктор)" << endl;
        this->root = root;
    }
    Tree(const Tree &tree) // конструктор копирования
    {
        cout << "Объект типа дерево создан (конструктор копирования)" << endl;
        this->root = tree.root;
    }
    ~Tree() // деструктор
    {
        cout << "Объект типа дерево удален" << endl;
    }
 
 
private:
    Tree* root = nullptr; // start element
 
};
//2. Класс, отвечающий за элемент структуры данных, содержащий:
//а. Поле/поля для хранения данных,
//б. Методы, отвечающие за базовые функции, относящиеся непосредственно к элементу структуры данных
class TreeElements
{
    friend class Tree;
private:
    TreeElements *left = NULL;
    TreeElements *right = NULL;
    TreeElements *parent = NULL;
 
    string year;
    string price;
    string make;
    string model;
    string color;
 
    void DeleteNode(TreeElements* root)
    {
        if(root == nullptr)
            return;
        DeleteNode(root->left);
        DeleteNode(root->right);
        delete root;
    }
 
public:
void InsertElement(TreeElements *root)
{
    root = new TreeElements;
    cout << "Введите год выпуска автомобиля: ";
    cin >> (*root).year;
    cout << "Введите цену автомобиля: ";
    cin >> (*root).price;
    cout << "Введите марку автомобиля: ";
    cin >> (*root).make;
    cout << "Введите модель автомобиля: ";
    cin >> (*root).model;
    cout << "Введите цвет автомобиля: ";
    cin >> (*root).color;
}
void DisplayTree(TreeElements* root)
{
    if(root == nullptr)
    {
        return;
    }
    cout << "Адрес элемента: " << root << endl;
    cout << "Год выпуска автомобиля: " << root->year << endl;
    cout << "Цена автомобиля: " << root->price << endl;
    cout << "Марка автомобиля: " << root->make << endl;
    cout << "Модель автомобиля: " << root->model << endl;
    cout << "Цвет автомобиля: " << root->color << endl;
    cout << "Цена автомобиля: " << root->price << endl;
}
int main()
{
    Tree Tree;
    TreeElements func;
    TreeElements* root = new TreeElements;
        int command;
        cout << "Введите информацию о корне дерева" << endl;
        func.InsertElement(root);
        TreeElements* now = root;
        cout << "Корневой элемент создан, его адрес: " << root << endl;
        while(1) {
            cout << "7 - Для вывода информации о текущем элементе" << endl;
            cin >> command;
            if (command == 7) {
                func.DisplayTree(now);
            }
            
}
 
};
Вывод:
Code
1
2
3
4
5
6
7
Адрес элемента: 0x1497a075fe0
Год выпуска автомобиля:
Цена автомобиля:
Марка автомобиля:
Модель автомобиля:
Цвет автомобиля:
Цена автомобиля:
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2022, 15:19
Ответы с готовыми решениями:

Использование в бинарном дереве объекты класса
Подскажите пожалуйста, как можно в бинарном дереве взаимодействовать с собственны классом set&lt;Studen&gt; baz = { Сдесь...

Вывод в бинарном дереве структуры данных
Есть структура данных.Необходимо создать бинарное дерево, упорядоченное по фамилиям владельцев в алфавитном порядке, обеспечить полный...

Поиск в бинарном дереве и вывод на консоль
Задание звучит так: Заполнить бинарное дерево данными из файла и реализовать поиск по ключу. С первым я справился, но не понимаю как...

12
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 15:41
Цитата Сообщение от lethe1337 Посмотреть сообщение
Tree* root = nullptr; // start element
Что это ? Почему дерево хранит указатель на другое дерево ?
C++
1
2
3
4
5
6
7
8
class Tree{
private:
    TreeElements* root = nullptr; // root element
public: // методы работы с деревом должны быть в дереве, а не в узле (элементе).
    void InsertElement(TreeElements * root);
    void DisplayTree(TreeElements* root);
    void DeleteNode(TreeElements* root);
};
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 15:58  [ТС]
SmallEvil, При строке
C++
1
TreeElements* root = nullptr; // root element
выдает ошибку Unknown type name 'TreeElements', хотя вроде я написал строку
C++
1
friend class TreeElements;
Добавлено через 4 минуты
SmallEvil, Я пытаюсь делать по аналогии с подобным заданием, и у меня выскакивают ошибки в тех местах, где там нету.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 16:10
Цитата Сообщение от lethe1337 Посмотреть сообщение
выдает ошибку Unknown type name 'TreeElements', хотя вроде я написал строку
А вы перенесите объявление класса TreeElements выше Tree.
А вообще, уже можете тренироваться разделять программу на модули.
Хидеры и реализации.

Добавлено через 32 секунды
Цитата Сообщение от SmallEvil Посмотреть сообщение
А вы перенесите объявление класса TreeElements выше Tree.
Или внутр класса Tree.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 16:13  [ТС]
SmallEvil, Модули - отдельные файлы, например, с функциями, классами?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 16:17
Цитата Сообщение от lethe1337 Посмотреть сообщение
Модули - отдельные файлы, например, с функциями, классами?
Да. Именно они.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 17:15  [ТС]
SmallEvil, У меня получилось разделить на модули, и появилась мысль почему так работает. В конструкторе я делаю все переменные пустыми, но с указателями left, right и parent потом все в порядке, а string и int переменные остаются пустыми, в чем может быть проблема?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 17:24
Лучший ответ Сообщение было отмечено lethe1337 как решение

Решение

Цитата Сообщение от lethe1337 Посмотреть сообщение
void InsertElement(TreeElements *root)
{
    root = new TreeElements;
root - это копия указателя.
Созданный элемент root = new TreeElements, в итоге теряется.
То есть Tree::root как был nullptr так и останется им.
Плюс не создаются связи в узле, вы их просто не используете.

C++
1
2
3
    TreeElements *left = NULL;
    TreeElements *right = NULL;
    TreeElements *parent = NULL;
Добавлено через 2 минуты
Когда будете задавать след. вопрос, приведите последний тестируемый код.
1
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 17:25  [ТС]
SmallEvil, Вроде бы все. Я убрал эту строку и заработало. Снова благодарю за помощь =)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 17:28
Цитата Сообщение от lethe1337 Посмотреть сообщение
заработало
Для одного элемента ?
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 17:45  [ТС]
SmallEvil, Нет, для множества

Добавлено через 7 минут
SmallEvil, У меня один вопрос появился, почему это
C++
1
2
3
4
class Tree{
private:
    Tree* root = nullptr; // root element
};
указывает на другое дерево, если Tree* root в классе Tree?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.10.2022, 17:57
Цитата Сообщение от lethe1337 Посмотреть сообщение
почему это указывает на другое дерево
Начнем с того что представляет класс Tree ? Дерево ?
Если да, то Tree* tree; - это указатель на Дерево.
Что и требовалось доказать.

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
почему это указывает на другое дерево
Ну может указывать и на самого себя, не обязательно на другое дерево.
Но смысла в данном контексте это не добавляет ни на грамм.
0
2 / 2 / 0
Регистрация: 22.07.2020
Сообщений: 195
13.10.2022, 18:12  [ТС]
SmallEvil, Да, это дерево. Получается и правда бессмысленная строчка. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2022, 18:12
Помогаю со студенческими работами здесь

Вывод в бинарном дереве структуры данных
Есть структура данных.Необходимо создать бинарное дерево, упорядоченное по фамилиям владельцев в алфавитном порядке, обеспечить полный...

Почему именно такой вывод цифр в бинарном дереве?
#include &lt;math.h&gt; using namespace std; #include &lt;iostream&gt; #include &quot;treenodelib.h&quot; /* run this program using the console pauser...

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

Поиск в бинарном дереве
Не получается организовать поиск в бинарном дереве по значению, а не по ключу. Использую дерево в качестве примера переводчика, то-есть я...

Поиск в бинарном дереве
Найти и удалить (правым удалением) среднюю по значению вершину из вершин дерева, у которых количество потомков в левом поддереве отличается...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru