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

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

19.11.2019, 22:05. Показов 1698. Ответов 4
Метки нет (Все метки)

По заданию нужно:
1. создание дерева;
2. добавление элемента в дерево;
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
using namespace std;
 
struct Node
{
    int x;
    Node* l, * r;
};
 
void show(Node*& Tree)
{
    if (Tree != NULL)
    {
        show(Tree->l);
        cout << Tree->x << '\t';
        show(Tree->r);
    }
}
 
void del(Node*& Tree) 
{
    if (Tree != NULL)
    {
        del(Tree->l);
        del(Tree->r);
        delete Tree;
        Tree = NULL;
    }
 
}
 
void add_node(int x, Node*& MyTree)
{
    if (NULL == MyTree)
    {
        MyTree = new Node;
        MyTree->x = x;
        MyTree->l = MyTree->r = NULL;
    }
 
    if (x < MyTree->x)
    {
        if (MyTree->l != NULL) add_node(x, MyTree->l);
        else
        {
            MyTree->l = new Node;
            MyTree->l->l = MyTree->l->r = NULL;
            MyTree->l->x = x;
        }
    }
 
    if (x > MyTree->x)
    {
        if (MyTree->r != NULL) add_node(x, MyTree->r);
        else
        {
            MyTree->r = new Node;
            MyTree->r->l = MyTree->r->r = NULL;
            MyTree->r->x = x;
        }
    }
}
 
int main()
{
    int x;
    Node* Tree = NULL;
    for (int i = 0; i < 7; i++)
    {
        cout << "x= "; cin >> x;
        add_node(x, Tree);
    }     
    show(Tree);
    cout << '\n';
    del(Tree);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2019, 22:05
Ответы с готовыми решениями:

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

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

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

Бинарное дерево
Помогите исправить ошибку, компилятор ругается на 110 строку, не пойму почему( #include &lt;iostream&gt;...

4
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
19.11.2019, 22:13 2
Цитата Сообщение от Лена Есеева Посмотреть сообщение
3. вывод дерева на экран в прямом, обратном или симметричном порядке обхода (у меня симметричный)
Проблема в том, что дерево в обходе выводит не так, как должно быть, а просто в порядке возрастания. Помогите пожалуйста исправить код
Потому что у тебя прямой обход. Обратный - то же самое, только сначала заходить в правую ветку, потом в левую.
А симметричный - это как вообще?
Может так?
C++
1
2
3
4
5
6
   if (Tree != NULL)
    {
        cout << Tree->x << '\t';
        show(Tree->l);
        show(Tree->r);
    }
1
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
19.11.2019, 22:31  [ТС] 3
oleg-m1973, симметричный, это как раз как у меня, когда выводится левый узел -> вершина -> правый узел
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
19.11.2019, 22:41 4
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, симметричный, это как раз как у меня, когда выводится левый узел -> вершина -> правый узел
Это и есть
Цитата Сообщение от Лена Есеева Посмотреть сообщение
а просто в порядке возрастания.
Добавлено через 1 минуту
Т.е. прямой.
Симметричный - это что-то другое

Добавлено через 3 минуты
А ну да, у тебя всё правильно, симметричный и правильно работает

Добавлено через 16 секунд
Посмотрел в гугле

Добавлено через 2 минуты
В порядке возрастания у тебя выводит, потому что ты так добавляешь элементы (правильно, на то оно и дерево). А как надо?
1
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
19.11.2019, 23:02  [ТС] 5
oleg-m1973, да, извините за беспокойство, все у меня правильно, это я что-то ступила, посчитала наверно не правильно)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2019, 23:02
Помогаю со студенческими работами здесь

бинарное дерево
С помощю бинарного дерева нужна сделать программу,,любую (главное что на экран выводило)

Бинарное дерево
Объясните пжлст почему не работает программа...при вводе файла пишет -842150451 /*Дан адрес P1...

Бинарное дерево
дано целочисленнное бинарное дерево. найти: а)количество вершин дереваж б)значение самой левой...

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


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

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

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