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

Нужно реализовать класс Бинарное дерево.

25.01.2014, 12:28. Показов 2814. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно реализовать класс Бинарное дерево.
Вот класс
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
template <class T> class Tree
{
private:
    class Item{
        friend Tree;
        Item* parent;
        Item* left;
        Item* right;
        T value;
        Item(T value, Item* parent, Item* left = nullptr, Item* right = nullptr) { value(value), parent(parent), left(left), right(right) }
    };
 
    Item* root;
 
    void Add(T& value, Item* ptr)
    {
        if (ptr->value > value)
        {
            if (ptr->left)
            {
                Add(value, ptr->Add);
            }
            else
            {
                ptr->left = new Item(value, ptr);
            }
        }
        else
        {
            if (ptr->right)
            {
                Add(value, ptr->right);
            }
            else
            {
                ptr->right = new Item(value, ptr);
            }
        }
    }
    void Print(Item* ptr)
    {
        
        if (ptr->left)Print(ptr->left);
        cout << ptr->value << "; ";
        if (ptr->right)Print(ptr->right);
    }
 
    void Destroy(Item* ptr)
    {
        if (ptr->left)Destroy(ptr->left);
        if (ptr->right)Destroy(ptr->right);
        delete ptr;
    }
 
public:
    Tree() :root(nullptr)
    {
 
    }
 
    void Add(T value)
    {
        if (root)
        {
            Add(value, root);
        }
        else
            root = new Item(value, nullptr);
    }
 
    void Print()
    {
        if (!root)
        {
            cout << "Tree is empty" << endl;
        }
        else
            Print(root);
    }
 
    ~Tree(){
        if (root)Destroy(root);
    }
        };
Вот функция main
C++
1
2
3
4
5
6
int main(){
    Tree <int> BTree;
    BTree.Add(50);
    BTree.Print();
    _getch();
}
Но при компиляции выдает
Code
1
Ошибка    1   error C2039: Add: не является членом "Tree<int>::Item"
Я не пойму что не так. Помогите разобраться
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2014, 12:28
Ответы с готовыми решениями:

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

Класс бинарное дерево
Здравствуйте. Требуется написать англо-русский словарь на основе бинарного дерева. Не полностью понимаю, как будет выглядеть класс....

Описать класс, реализующий бинарное дерево
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по...

7
 Аватар для SaweR
29 / 29 / 4
Регистрация: 29.09.2009
Сообщений: 177
25.01.2014, 12:46
Цитата Сообщение от arking Посмотреть сообщение
Add(value, ptr->Add);
Add – это не свойство, а функция.
Может ты хотел написать вот так?
C++
1
Add(value, ptr);
1
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 17
25.01.2014, 12:57  [ТС]
при таком изменении ругается на
C++
1
Item(T value, Item* parent, Item* left = nullptr, Item* right = nullptr) { value(value), parent(parent), left(left), right(right) }
Ошибка 1 error C2064: результатом вычисления фрагмента не является функция, принимающая 1 аргументов
Ошибка 2 error C2143: синтаксическая ошибка: отсутствие ";" перед "}"

Дело в том, что этот класс был списан с доски, то есть должен быть верным. я думал что я что-то неправильно сделал в main, не так вызываю или объявляю
0
 Аватар для SaweR
29 / 29 / 4
Регистрация: 29.09.2009
Сообщений: 177
25.01.2014, 13:07
Я исправил класс Item: исправил конструктор и добавил переменную value. У меня всё работает.
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
#include <iostream>
using namespace std;
 
template <class T> class Tree
{
private:
    class Item{
        friend Tree;
        Item* parent;
        Item* left;
        Item* right;
        T value;
        Item(T value, Item* parent, Item* left = nullptr, Item* right = nullptr) : value(value), parent(parent), left(left), right(right) {}
    };
 
    Item* root;
 
    void Add(T& value, Item* ptr)
    {
        if (ptr->value > value)
        {
            if (ptr->left)
            {
                Add(value, ptr);
            }
            else
            {
                ptr->left = new Item(value, ptr);
            }
        }
        else
        {
            if (ptr->right)
            {
                Add(value, ptr->right);
            }
            else
            {
                ptr->right = new Item(value, ptr);
            }
        }
    }
    void Print(Item* ptr)
    {
        
        if (ptr->left)Print(ptr->left);
        cout << ptr->value << "; ";
        if (ptr->right)Print(ptr->right);
    }
 
    void Destroy(Item* ptr)
    {
        if (ptr->left)Destroy(ptr->left);
        if (ptr->right)Destroy(ptr->right);
        delete ptr;
    }
 
public:
    Tree() :root(nullptr)
    {
 
    }
 
    void Add(T value)
    {
        if (root)
        {
            Add(value, root);
        }
        else
            root = new Item(value, nullptr);
    }
 
    void Print()
    {
        if (!root)
        {
            cout << "Tree is empty" << endl;
        }
        else
            Print(root);
    }
 
    ~Tree(){
        if (root)Destroy(root);
    }
        };
int main(){
    Tree <int> BTree;
    BTree.Add(50);
    BTree.Print();
    system("pause");
}
1
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 17
25.01.2014, 13:40  [ТС]
Спасибо большое, выручили))

Добавлено через 27 минут
Можете еще помочь, почему при заполнении дерева случайными числами с помощью rand() происходит переполнение стека?
0
 Аватар для SaweR
29 / 29 / 4
Регистрация: 29.09.2009
Сообщений: 177
25.01.2014, 13:46
Цитата Сообщение от arking Посмотреть сообщение
с помощью rand()
Дай код, посмотрю.
0
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 17
25.01.2014, 13:49  [ТС]
Вот
C++
1
2
3
4
5
srand((unsigned)time(NULL));
    for (int i = 0; i < 10; i++)
    {
            BTree.Add(rand() % 100);
    }
0
 Аватар для SaweR
29 / 29 / 4
Регистрация: 29.09.2009
Сообщений: 177
25.01.2014, 14:29
Исправил:
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
#include <iostream>
#include <random>
using namespace std;
 
template <class T> class Tree
{
private:
    class Item
    {
        friend Tree;
        Item* parent;
        Item* left;
        Item* right;
        T value;
        Item(T value, Item* parent, Item* left = nullptr, Item* right = nullptr) : value(value), parent(parent), left(left), right(right) {}
    };
 
    Item* root;
 
    void Add(T& value, Item* ptr)
    {
        if (ptr->value > value)
        {
            if (ptr->left)
            {
                Add(value, ptr->left); // fix
            }
            else
            {
                ptr->left = new Item(value, ptr);
            }
        }
        else
        {
            if (ptr->right)
            {
                Add(value, ptr->right);
            }
            else
            {
                ptr->right = new Item(value, ptr);
            }
        }
    }
    void Print(Item* ptr)
    {
        
        if (ptr->left)Print(ptr->left);
        cout << ptr->value << "; " << endl;
        if (ptr->right)Print(ptr->right);
    }
 
    void Destroy(Item* ptr)
    {
        if (ptr->left)Destroy(ptr->left);
        if (ptr->right)Destroy(ptr->right);
        delete ptr;
    }
 
public:
    Tree() :root(nullptr)
    {
 
    }
 
    void Add(T value)
    {
        if (root)
        {
            Add(value, root);
        }
        else
            root = new Item(value, nullptr);
    }
 
    void Print()
    {
        if (!root)
        {
            cout << "Tree is empty" << endl;
        }
        else
            Print(root);
    }
 
    ~Tree(){
        if (root)Destroy(root);
    }
        };
int main()
{
    Tree <int> BTree;
    random_device rd;
    mt19937_64 gen(rd());
    uniform_int_distribution<int> dis;
    for (int i = 0; i < 10; i++)
    {
            BTree.Add(dis(gen));
    }
    BTree.Print();
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2014, 14:29
Помогаю со студенческими работами здесь

Создать шаблонный класс «бинарное дерево»
Создать шаблон класса «бинарное дерево». Использовать его для сортировки целых чисел и строк, задаваемых с клавиатуры или из файла.

Создать шаблонный класс «бинарное дерево»
Создать шаблон класса «бинарное дерево». Использовать его для сортировки целых чисел и строк, задаваемых с клавиатуры Можно простой код...

Описать класс, реализующий бинарное дерево
Здравствуйте! Возникли проблемы с реализацией одной программы ....Описать класс, реализующий бинарное дерево, обладающее возможностью...

Описать класс, реализующий бинарное дерево
помогите ..ребят знаю что обсуждалось уже кучу раз..но у мне выдаёт ошибки..разобраться не могу..эту роботу должна сдать очень скоро..(( ...

Зачем нужно бинарное дерево?
Какие задачи можно решать с помощью бинарного дерева?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru