0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 613
1

Как отсортировать бинарное дерево по ключу

16.04.2021, 22:50. Показов 533. Ответов 3

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
#include <iostream>
using namespace std;
struct tree {
    int ticket_code;
    int numberofthings;
    string last_name;
    tree* left, * right;
};
#define COUNT 10
 
 
void create_tree(tree** p, int n)
{
    if (n == 0)
    {
        *p = NULL;
    }
    else
    {
 
        tree* newP = new tree;
        cout << "VVedi ticket_code: ";
        cin >> newP->ticket_code;
        cout << "VVedi numberofthings: ";
        cin >> newP->numberofthings;
        cout << "VVedi lastname: ";
        cin >> newP->last_name;
        int
            nl = n / 2,
            nr = n - nl - 1;
        create_tree(&newP->left, nl);
        create_tree(&newP->right, nr);
        *p = newP;
    }
}
void print2DUtil(tree* root, int space)
{
    if (root == NULL)
        return;
 
    std::string indent(space, ' ');
    cout << indent << root->ticket_code << "\n";
    cout << indent << root->numberofthings << "\n";
    cout << indent << root->last_name << "\n";
 
    print2DUtil(root->right, space + COUNT);
    print2DUtil(root->left, space + COUNT);
}
void print2D(tree* root)
{
    print2DUtil(root, 0);
}
int main()
{
    int n;
    tree* root;
    cout << "VVedi razmer: ";
    cin >> n;
    create_tree(&root, n);
    print2D(root);
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2021, 22:50
Ответы с готовыми решениями:

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

Написать функцию добавления элементов в бинарное дерево и поиска по ключу
Всем доброго времени суток! Немогу никак найти нормальною теорию или пример, поэтому уже пришлось...

Отсортировать числа, построив бинарное дерево
Помогите пожалуйста срочно разобраться с задачей. Заранее большое спасибо) Дан список целых...

Бинарное дерево. Данные о сотрудниках содержат фамилию и оклад, занести в бинарное дерево поиска
решите. данные о сотрудниках содержат фамилию и оклад (целое число, превышающее 50000). требуется...

3
6 / 4 / 2
Регистрация: 01.10.2020
Сообщений: 37
16.04.2021, 23:52 2
Разве бинарное дерево не должно строиться сразу сортированным?
0
С чаем беда...
Эксперт CЭксперт С++
9988 / 5341 / 1460
Регистрация: 18.10.2014
Сообщений: 12,840
17.04.2021, 03:58 3
Цитата Сообщение от Andriyipz Посмотреть сообщение
Как отсортировать бинарное дерево по ключу
Что такое "отсортировать бинарное дерево"? Какова точная постановка задачи?

Если нужно просто получить какое-то отсортированное дерево с теми же ключами, то возможно проще просто с нуля построить новое дерево, то есть перебросить существующие узлы в новое дерево классическим алгоритмом построения упорядоченного дерева.

Если же нужно получить отсортированное дерево точно той же структуры, то это уже совсем другая задача.
0
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 613
17.04.2021, 10:54  [ТС] 4
У меня такая задача: Пересыпать данные с первого дерева в другое дерево того же типа, только
организованного по первому числовым ключом (например., годом рождения) и
распечатать его (а первое дерево стереть). Вот что у меня получилось но чего-то не выводит новое дерево


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
#include <iostream>
using namespace std;
struct tree {
    int ticket_code;
    int numberofthings;
    string last_name;
    tree* left, * right;
};
#define COUNT 10
 
 
void create_tree(tree** p, int n)
{
    if (n == 0)
    {
        *p = NULL;
    }
    else
    {
 
        tree* newP = new tree;
        cout << "VVedi ticket_code: ";
        cin >> newP->ticket_code;
        cout << "VVedi numberofthings: ";
        cin >> newP->numberofthings;
        cout << "VVedi lastname: ";
        cin >> newP->last_name;
        int
            nl = n / 2,
            nr = n - nl - 1;
        create_tree(&newP->left, nl);
        create_tree(&newP->right, nr);
        *p = newP;
    }
}
void print2DUtil(tree* root, uint32_t links = 0, int bits = 0)
{
    if (root == NULL)
        return;
 
    print2DUtil(root->right, links, bits + 1);
 
 
    uint32_t flag = links ^ links << 1;
    for (int i = 1; i < bits; i++)
    {
        if (flag & 1 << i)
            cout << "  |";
        else
            cout << "   ";
    }
    if (bits == 0)
        cout << "--";
    else if (links & 1 << bits - 1)
        cout << "   `--";
    else
        cout << "   .--";
 
 
    cout << root->ticket_code << "\t";
    cout << root->numberofthings << "\t";
    cout << root->last_name << "\t";
    cout << endl;
 
 
    print2DUtil(root->left, links | (1 << bits), bits + 1);
}
int getSum(tree* root, int& elements, int& sum)
{
    ++elements;
    sum += root->ticket_code;
    if (root->left != NULL)
        getSum(root->left, elements, sum);
    if (root->right != NULL)
        getSum(root->right, elements, sum);
    return sum;
}
int getAverage(tree* root)
{
    int sum = 0;
    int elements = 0;
    getSum(root, elements, sum);
    return sum / elements;
}
 
void deleteBinaryTree(tree*& root)
{
    if (root == nullptr) {
        return;
    }
 
    deleteBinaryTree(root->left);
    deleteBinaryTree(root->right);
 
    delete root;
 
    root = nullptr;
}
void Pushage(tree** t, string last_name, int ticket_code, int numberofthings) {
    if ((*t) == NULL){
        (*t) = new tree;
        (*t)->last_name = last_name;
        (*t)->ticket_code = ticket_code;
        (*t)->numberofthings = numberofthings;
        (*t)->left = (*t)->right = NULL;
}
    if (ticket_code > (*t)->ticket_code) {
        Pushage(&(*t)->right, last_name, ticket_code, numberofthings);
    }
    else {
        Pushage(&(*t)->left, last_name, ticket_code, numberofthings);
    }
}
void AgeTree(tree* firstTree, tree** newTree) {
    string last_name;
    int ticket_code;
    int numberofthings;
    if (firstTree) return;
    last_name = firstTree->last_name;
    ticket_code = firstTree->ticket_code;
    numberofthings = firstTree->numberofthings;
    Pushage(newTree, last_name, ticket_code, numberofthings);
    AgeTree(firstTree->left, newTree);
    AgeTree(firstTree->right, newTree);
}
int main()
{
    int n;
    tree* root;
    tree* newTree = NULL;
    cout << "VVedi razmer: ";
    cin >> n;
    create_tree(&root, n);
    print2DUtil(root);
    float average = getAverage(root);
    cout << endl;
    cout << average<<endl;
    /*deleteBinaryTree(root);
    if (root == nullptr) {
        cout << "Tree Successfully Deleted";
    }*/
    AgeTree(root, &newTree);
    deleteBinaryTree(root);
    if (root == nullptr) {
        cout << "Tree Successfully Deleted";
    }
    print2DUtil(newTree);
    return 0;
}
Добавлено через 1 час 51 минуту
Не знаете чего?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2021, 10:54
Помогаю со студенческими работами здесь

Бинарное дерево: как происходит добавления элемента в дерево с двумя параметрами
Здравствуйте! Прошу помощи у опытных программистов...)))) Есть класс дерево: class class1 ...

Преобразовать идеальное бинарное дерево в бинарное дерево поиска
Всем привет, я создал идельное бинарное дерево и написал к нему функции. Как мне теперь можно...

как отсортировать список по любому ключу?
#include&lt;iostream&gt; using namespace std; struct Travelers { int ticket_code; string...

Как нарисовать бинарное дерево?
Ни разу прежде не работал с окнами. Но мне надо по лабораторным написать несколько программулек по...

Как реализовать бинарное дерево?
Здравствуйте! Нужно реализовать структуру данных &quot;список&quot;. Я чуть-чуть знаком с С++, но в С# совсем...

Как реализовать бинарное дерево?
Всем привет. Ребят подскажите как реализовать бинарное дерево (не дерево бинарного поиска, а именно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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