Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск по имени в структурах Например: пользователь вводит название растения и оно ему выводит. Без понятия как это сделать. Прочитал все и ничего не толкового не нашел. #include <iostream> using namespace std; struct building //Создаем структуру! { char *name; char *domein; char *kingdom; char *department; https://www.cyberforum.ru/ cpp-beginners/ thread2430360.html найти произведение цифр четырехзначного десятичного числа C++
Дано 4-значное число найти произведение этих чисел. Просто перемножить все 4 числа, тип(1364=1*3*6*4=72)
C++ Подсчитать количество элементов массива с нечетными номерами меньших заданного числа Подсчитать количество елементов массива меньших за (а) с непарными номерами. Елементы массива вводим вручную. https://www.cyberforum.ru/ cpp-beginners/ thread2430340.html C++ Вычисление значения функции заданной разложением в ряд Тейлора https://www.cyberforum.ru/ cpp-beginners/ thread2430339.html
Написать программу для вывода результата числовой последовательности S=1-(x^(2))/2 + (x^(4))/4 - … + ((-1)^(n))*(x^(2n))/(2n).
C++ Массив из натуральных чисел формируется из случайных n чисел. Найти (a_1*a_n,a_2*a_n-1,…):
Массив из натуральных чисел формируется из случайных n чисел. Найти (a_1*a_n,a_2*a_n-1,…), где a_1,a_2,...,a_n - элементы массив. Если таких произведений несколько, указать значения соответствующих сомножителей. Должно быть не меньше 3-х функций (ввод, вывод, ...).
C++ Цілочісельний масив утворюється з n випадкових чісел.Потрібно https://www.cyberforum.ru/ cpp-beginners/ thread2430329.html
Цілочісельний масив утворюється з n випадкових чісел.Потрібно серед елементів масива,які розміщуються після його першого відємного елемента,знайти кількість таких,які закінчуються цифрою неменшою за 5.
C++ Законы логики Почему НЕ А , нельзя выразить через дизъюнкцию и импликацию https://www.cyberforum.ru/ cpp-beginners/ thread2430312.html C++ Найти количество положительных элементов массива
заданный одномерный массив А (8). Найти количество положительных элементов массива
C++ Как очистить массив по типу std::vector::clear() https://www.cyberforum.ru/ cpp-beginners/ thread2430281.html
Доброго времени суток, я хочу реализовать очистку массива на подобии как это сделанно в векторе, но как я залез в исходники вектора ничего не понял. По данной ссылке, сказанно: "Делает недействительными все ссылки, указатели или итераторы указывающие на удалённые элементы. Может также сделать недействительными итераторы после конца последовательности. " Вопрос: как именно сделать их...
C++ Как это работает? https://www.cyberforum.ru/ cpp-beginners/ thread2430279.html
Помогите разобраться пожалуйста,срочно нужно
C++ Чтение сокета в одном потоке, обработка в другом
Приветствую всех. В C/C++ новичок, прошу помощи. Имеются наброски приложения Linux, которое, на данный момент, выполняет следующее: 1. Запускается, в основном потоке программы выводит приветственное сообщение. 2. В новом thread запускает void функцию, которая коннектится к TCP хосту 3. На протяжении всей работы программы выше указанная функция в цикле читает сокет в буфер char 4. Данные с...
C++ Программа дешифровки https://www.cyberforum.ru/ cpp-beginners/ thread2430273.html
Составить программу дешифровки заданного уравнения: пользователь вводит уравнение (напр. abc+bd+c=add), после чего происходит подбор возможных вариантов решения. Как такое провернуть?
0 / 0 / 0
Регистрация: 21.09.2017
Сообщений: 7
0

Бинарное дерево на C++ - C++ - Ответ 13460270

03.04.2019, 14:09. Показов 1328. Ответов 1
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Выношу себе мозг с реализацией этого дерева уже несколько дней. Прошу помощи.

Задание:

Реализовать BST (Binary Search Tree).

Дерево должно быть шаблонизировано - нужно продемонстрировать работу на хотя бы значениях int, double, string.

Нужно реализовать операции добавления элемента и поиска элемента.

Нужно реализовать автоматическую балансировку.
Для демонстрации ее работы в пустое дерево добавляем последовательно значения от 0 до 30 и выводим дерево в консоль/svg.
Глубина каждой ветки не должна быть больше 5.

Вывод дерева в консоль/svg

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

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <iostream>
 
 
 
 
using namespace std;
 
 
class btree {
 
    struct node {
        int value;
        unsigned char height;
        node *left;
        node *right;
        node(int v) { value = v; left = right = 0; height = 1;}
    }; /// структура для представления узлов дерева
 
    node* rotateright(node* y){
        node* x = y->left;
        y->left = x->right;
        x->right = y;
        fixheight(y);
        fixheight(x);
        return x;
    } /// правый поворот вокруг y
 
    node* rotateleft(node* x){
        node* y = x->right;
        x->right = y->left;
        y->left = x;
        fixheight(x);
        fixheight(y);
        return y;
    } /// левый поворот вокруг x
 
    node* balance(node* leaf){
        fixheight(leaf);
        if( balancefactor(leaf)==2 )
        {
            if( balancefactor(leaf->right) < 0 )
                leaf->right = rotateright(leaf->right);
            return rotateleft(leaf);
        }
        if( balancefactor(leaf)==-2 )
        {
            if( balancefactor(leaf->left) > 0  )
                leaf->left = rotateleft(leaf->left);
            return rotateright(leaf);
        }
        return leaf;
    } /// Балансировка узла
 
    node *root;
 
    node* clear_tree(node *leaf){
        if (leaf != nullptr) {
            clear_tree(leaf->left);
            clear_tree(leaf->right);
            delete leaf;
        }
    } /// Очистка дерева
 
    node* insert(node* leaf, int x){
        if( !leaf ) return new node(x);
        if( x<leaf->value )
            leaf->left = insert(leaf->left,x);
        else
            leaf->right = insert(leaf->right,x);
        return balance(leaf);
    }/// Вставка значений
 
    node* search(int key, node *leaf){
        if (leaf != nullptr) {
            if (key == leaf->value) {
                cout << "There is" << " " << key << endl;
                return leaf;
 
            }
            if (key < leaf->value) {
                return search(key, leaf->left);
            } else {
                return search(key, leaf->right);
            }
        } else {
            cout << "There is no" << " " << key << endl;
            return nullptr;
        }
    } /// Поиск значений
 
    unsigned char height(node* leaf){
        return static_cast<unsigned char>(leaf ? leaf->height : 0);
    }
 
    int balancefactor(node* leaf){
        return height(leaf->right)-height(leaf->left);
    }
 
    void fixheight(node* leaf){
        unsigned char hl = height(leaf->left);
        unsigned char hr = height(leaf->right);
        leaf->height = static_cast<unsigned char>((hl > hr ? hl : hr) + 1);
    }
 
    void inorder_print(node* leaf) {
        if (leaf == nullptr)
            return;
        inorder_print(leaf->left);
        cout << leaf->value << " ";
        inorder_print(leaf->right);
 
    }
 
    void preorder_print(node* leaf) {
        if (leaf != nullptr) {
            cout << leaf->value << " ";
            inorder_print(leaf->left);
            inorder_print(leaf->right);
        }
        else
            cout << "There is no trees" << endl;
    }
 
public:
    btree(){
        root= nullptr;
    }
 
    ~btree(){
        root=clear_tree(root);
    }
 
    void insert(int key) {
        root=insert(root, key);
        }
 
    void preorder_print() {
        preorder_print(root);
        cout << "\n";
    }
 
    void inorder_print() {
        inorder_print(root);
        cout << endl;
    }
 
    void search(int key) {
        root = search(key, root);
    }
 
    int Height(node* leaf){
        int left, right;
 
        if(leaf == nullptr)
            return 0;
        left = Height(leaf->left);
        right = Height(leaf->right);
        if(left > right)
            return left+1;
        else
            return right+1;}
 
    void clear_tree() {
        clear_tree(root);
    }
 
};
 
 
int main(){
 
  btree t;
    for (int i = 0; i <= 30; ++i) {
        t.insert(i);
    }
  t.inorder_print();
  t.preorder_print();
 t.search(16);
 t.search(55);
 t.search(5);
 
 
 t.clear_tree();
 t.preorder_print();


Вернуться к обсуждению:
Бинарное дерево на C++ C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2019, 14:09
Готовые ответы и решения:

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

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево
Здравствуйте, нужно помощь в написании программы. Условие: Каждая вершина бинарного дерева...

Бинарное дерево
Только начал изучать тему &quot;деревья&quot;. Подскажите в чем ошибка)#include &lt;iostream&gt; using namespace...

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

Бинарное дерево
Доброго времени суток. Ребят, я не спец, требуется решить такую задачу: Написать нерекурсивную...

Бинарное дерево
Здравствуйте дорогие форумчане. Помогите, пожалуйста, реализовать бинарное дерево поиска, а так же...

C++, Бинарное дерево
Привет. Можете помочь с заданием. Прочитал кучу теорию по бинарным деревьям. Сел делать вообще не...

Бинарное дерево
Здавствуйте, не работает удаление элемента в бинарном девере поиска. Задание: Задание: Описать...

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