Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 04.11.2017
Сообщений: 11
1

Бинарное дерево

04.11.2017, 21:08. Показов 1298. Ответов 8
Метки нет (Все метки)

Задание сделать бинарное дерево, но при добавлении появилась проблема, не могу разобраться с параметрами и аргументами функции, пожалуйста помогите.
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
#include <iostream>
using namespace std;
 
struct tree {
    int inf;
    tree *r;
    tree *l;
};
tree* Root;
void add (tree **Root);
void obhod(tree *Root);
void print (tree *Root,int level);
 
 
int main () {
    int x;
    setlocale (LC_ALL,"");
    while (!0){
    cout << "Меню дерева"<< endl;
    cout << "1 - Добавление элемента"<<endl;
    cout << "2 - Обход дерева"<<endl;
    cout << "3 - Вывод дерева"<<endl;
    cout << "4 - Уничтожение дерева"<<endl;
    cout << "5 - Удаление вершины"<<endl;
    cout << "6 - Поиск вершины дерева по ключу"<<endl;
        cout << "";
        cin >> x;
        system("cls");
        switch(x){
            case 1:add(&Root); break;
            case 2:obhod(Root);break;
            case 3:print(Root,0); break;
        }
    }
    system ("pause");
    return 0;
}
 
tree* insert(tree *root,int item){
    if (root == NULL){
        tree *root = new tree;
        root->inf = item;
        root->l = NULL;
        root->r = NULL;
    }else if (item > root->inf){
        insert(root->r,item);
    }else{
        insert(root->l,item);
    }
    return root;
}
 
void add(tree **Root){
    int a;
    cout << "Введите элемент - ";
    cin >> a;
    *Root = insert(**&Root,a);
    cout << (*Root)->inf <<endl;
}
 
void obhod(tree *Root){
    
}
 
void print(tree *Root,int level){
    if (Root == NULL){
        cout << "Дерево не посажено"<<endl;
    }else {
        print (Root->l,level+1);
        for (int i=0;i<level;i++){
        cout <<" ";
        }
        cout << Root->inf <<endl;
    print (Root->r,level++);
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2017, 21:08
Ответы с готовыми решениями:

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

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

Бинарное дерево
Помогите, пожалуйста. Осталась последняя задача в контрольной. Не знаю даже, как к ней...

Бинарное Дерево
struct Tree { int value; Tree *l, *r; }; void add(Tree *&amp;obj, int value) { if (obj ==...

8
7048 / 6066 / 2757
Регистрация: 14.04.2014
Сообщений: 25,994
05.11.2017, 10:35 2
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
tree* insert(tree *root, int item)
{
    if (root == NULL)
    {
        tree *root = new tree;
        root->inf = item;
        root->l = NULL;
        root->r = NULL;
        return root;
    }
    else if (item > root->inf)
        return insert(root->r,item);
    else
        return insert(root->l,item);
}
 
void add(tree *& Root)
{
    int a;
    cout << "Введите элемент - ";
    cin >> a;
    if (Root == NULL) Root = insert(NULL, a);
    else insert(Root, a);
    cout << Root->inf <<endl;
}
1
0 / 0 / 0
Регистрация: 04.11.2017
Сообщений: 11
05.11.2017, 12:16  [ТС] 3
Спасибо за отклик, первый элемент(корневой узел) добавляет а вот дальше не идет
0
7048 / 6066 / 2757
Регистрация: 14.04.2014
Сообщений: 25,994
05.11.2017, 12:31 4
У тебя настройка связи между элементами не реализована.
0
0 / 0 / 0
Регистрация: 04.11.2017
Сообщений: 11
05.11.2017, 12:47  [ТС] 5
а разве когда мы делаем рекурсию мы не перенаправляем новый элемент к левой или правой вершине?
0
7048 / 6066 / 2757
Регистрация: 14.04.2014
Сообщений: 25,994
05.11.2017, 13:43 6
Ты просто идёшь по существующему дереву, создаёшь новый элемент, но не перенаправляешь на него родительский l или r.
0
0 / 0 / 0
Регистрация: 04.11.2017
Сообщений: 11
06.11.2017, 10:26  [ТС] 7
блин бился пол дня над тем как бы установить связь, мб кто поможет
0
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
06.11.2017, 10:52 8
Лучший ответ Сообщение было отмечено Satorus как решение

Решение

Satorus, я немного поправил. вроде работает. ПРОВЕРЬТЕ!!

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
int main() {
    int x;
    setlocale(LC_ALL, "");
    while (!0) {
        cout << "Меню дерева" << endl;
        cout << "1 - Добавление элемента" << endl;
        cout << "2 - Обход дерева" << endl;
        cout << "3 - Вывод дерева" << endl;
        cout << "4 - Уничтожение дерева" << endl;
        cout << "5 - Удаление вершины" << endl;
        cout << "6 - Поиск вершины дерева по ключу" << endl;
        cout << "";
        cin >> x;
        system("cls");
        switch (x) {
        case 1:add(&Root); break;
        case 2:obhod(Root); break;
        case 3:print(Root, 0); break;
        }
    }
    system("pause");
    return 0;
}
 
void insert(tree **root, int item) {
    if (*root == NULL) {
        *root = new tree;
        (*root)->inf = item;
        (*root)->l = NULL;
        (*root)->r = NULL;
    }
    else if (item > (*root)->inf) {
        insert(&(*root)->r, item);
    }
    else {
        insert(&(*root)->l, item);
    }
    return;
}
 
void add(tree **Root) {
    int a;
    cout << "Введите элемент - ";
    cin >> a;
    insert(Root, a);
    cout << (*Root)->inf << endl;
}
1
0 / 0 / 0
Регистрация: 04.11.2017
Сообщений: 11
06.11.2017, 11:08  [ТС] 9
Да спасибо, только что до вас сделал сам, только правда немного иначе ( без указателя, а напрямую через ссылку на корневой узел), ваш вариант проверил, тоже работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2017, 11:08

Бинарное дерево
Друзья, помогите реализовать задачу в виде бинарного дерева: Оператор мобильной связи...

Бинарное дерево
Написать программу для создания, на основе конструктора,дерева из объектов двух типов. Объекты...

Бинарное дерево
Привет Делаю бинарное дерево, пытаюсь добавить элемент. Что делаю не так? Класс дерева...

Бинарное дерево
Помогите пожалуйста с программой. Нужно сделать обход, слева и справа(функции get_left и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.