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

Бинарные деревья, вывод дерева на экран

10.11.2014, 19:47. Просмотров 1869. Ответов 16
Метки нет (Все метки)

Создание бинарное дерево, помогите с выводом дерева на экран


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>
#include <cstdlib>
using namespace std;
 
template<class T>
class BinarySearchTree
{
private:
    struct tree_node
    {
        tree_node* left;
        tree_node* right;
        T data;
    };
    tree_node* root;
    
public:
    BinarySearchTree()
    {
        root = NULL;
    }
    bool isEmpty() const { return root==NULL; }
    void insert(T);
};
 
template <class T>
void BinarySearchTree<T>::insert(T d)
{
    tree_node* t = new tree_node;
    tree_node* parent;
    t->data = d;
    t->left = NULL;
    t->right = NULL;
    parent = NULL;
    // is this a new tree?
    if(isEmpty()) root = t;
    else
    {
        //Note: ALL insertions are as leaf nodes
        tree_node* curr;
        curr = root;
        // Find the Node's parent
        while(curr)
        {
            parent = curr;
            if(t->data > curr->data) curr = curr->right;
            else curr = curr->left;
        }
 
        if(t->data < parent->data)
            parent->left = t;
        else
            parent->right = t;
    }
 
}
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    system ("color F0");
    BinarySearchTree<int> b;
    int ch;
    int tmp,tmp1;
    while(1)
    {
        cout<<endl<<endl;
        cout<<" Binary Search Tree Operations "<<endl;
        cout<<" ----------------------------- "<<endl;
        cout<<" 1. Создание/Добавление "<<endl;
        cout<<" 2. Вывод на экран "<<endl; 
 
        cout<<" Введите ваш выбор : ";
        cin>>ch;
        switch(ch)
        {
        case 1 : cout<<" Введите данные : ";
            cin.ignore(1);
            cin>>tmp;
            b.insert(tmp);
            break;
        case 2 : cout<<endl;
            cout<<" Вывод на экран "<<endl;
            cout<<" -------------------"<<endl;
            
 
            break;
 
        }
    }
}
Добавлено через 1 час 27 минут
и можете подсказать как реализовать вывод максимального и минимального элемента
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2014, 19:47
Ответы с готовыми решениями:

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

Бинарные деревья. Напечатать все элементы дерева Т по уровням
Всем привет. Помогите написать программу или хотя бы функцию, условие следующее: Напечатать все...

Бинарные деревья: неправильный вывод
неправильно выводит дерево,что делать? #include&lt;iostream&gt; using namespace std; struct...

Бинарные деревья. Вывод потомка, находящего на заданное число уровней выше заданного элемента
Здравствуйте, уважаемые форумчане! Продолжая изучать бинарные деревья, решил подумать о выгодности...

16
4425 / 2047 / 260
Регистрация: 01.03.2013
Сообщений: 5,462
Записей в блоге: 22
10.11.2014, 22:19 2
Рисуй здесь пример, как хочется видеть дерево на экране.
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
10.11.2014, 22:21  [ТС] 3
ну к примеру
_____ 2_______
__3______ 4___
1___6 5___9
3
0
4425 / 2047 / 260
Регистрация: 01.03.2013
Сообщений: 5,462
Записей в блоге: 22
10.11.2014, 22:25 4
Не знаю как кому, а мне непонятна структура дерева по такому выводу.
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
10.11.2014, 22:28  [ТС] 5
если знаете как вывести дерево, то сделайте по-своему, буду благодарна
0
Эксперт C
24542 / 15166 / 3206
Регистрация: 24.12.2010
Сообщений: 32,535
10.11.2014, 22:33 6
Цитата Сообщение от _Ivana Посмотреть сообщение
мне непонятна структура дерева по такому выводу.
Понять-то ее можно, да уж больно формат уродлив. И надо заранее знать глубину вложенности, чтоб такое построить.
NAlt, почему бы вам не воспользоваться общепринятым представлением?
Код
2
 3
  1
   3
  6
 4
  1
  9
1
4425 / 2047 / 260
Регистрация: 01.03.2013
Сообщений: 5,462
Записей в блоге: 22
10.11.2014, 22:37 7
Байт, когда я писал о непонятии, дерево было другим - без подчеркиваний и отступов.
NAlt, если сделаю я, то что же останется вам?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
10.11.2014, 22:40  [ТС] 8
_Ivana, я только учусь, и многого не знаю о С++, и у меня еще много заданий по бинарным деревьям
поэтому, буду очень благодарна
0
Эксперт C
24542 / 15166 / 3206
Регистрация: 24.12.2010
Сообщений: 32,535
10.11.2014, 22:50 9
Цитата Сообщение от NAlt Посмотреть сообщение
я только учусь
обходить дерево умеешь? При первом(поверхностном) взгляде на твой код, кажется, да. Теперь осталось только для каждого узла запоминать уровень вложенности (его можно хранить в переменной класса). И при выводе узла просто вставлять соответствующее количество пробелов
0
4425 / 2047 / 260
Регистрация: 01.03.2013
Сообщений: 5,462
Записей в блоге: 22
10.11.2014, 22:50 10
NAlt, так давайте учиться. Деревья рисовать, а не на форумах клянчить. Посмотрите на визуализацию дерева от Байт - как вы думаете, как ее можно просто построить?
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
10.11.2014, 22:55  [ТС] 11
_Ivana, честно говоря ни одной мысли пока нет, вывод на экран каждого узла при обходе
0
4425 / 2047 / 260
Регистрация: 01.03.2013
Сообщений: 5,462
Записей в блоге: 22
10.11.2014, 23:07 12
Позиционируетесь на корень дерева, уровень вложенности нулевой - печатаете текущее значение узла с нулевым количеством пробелов перед ним в строке. Дальше рекурсивно идете в левый узел, увеличивая переменную уровня - если он не пустой - выводите его значение с количеством пробелов равным текущему уровню вложенности. И так далее рекурсивно проходите все дерево, распечатывая каждый непустой узел. Все.
2
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
10.11.2014, 23:09  [ТС] 13
_Ivana, спасибо большое)
0
Байт
10.11.2014, 23:15
  #14

Не по теме:

Цитата Сообщение от NAlt Посмотреть сообщение
_Ivana, спасибо большое)
_Ivana, На этот раз похоже, не зря старались:)

0
_Ivana
10.11.2014, 23:18
  #15

Не по теме:

Байт, в смысле - два лишних серебренника в репу? :) Не зря будет, когда ТС похвастается своим нарисованным деревом прямо здесь в теме.

0
Байт
10.11.2014, 23:32
  #16

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Не зря будет, когда ТС похвастается своим нарисованным деревом прямо здесь в теме.
Ну я, вообще-то - оптимист. Стараюсь им быть. Рад каждому удобному случаю:)

0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 136
11.11.2014, 20:44  [ТС] 17
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
template<class T>
class BinarySearchTree
{
 
private:
    struct tree_node
    {
        tree_node* left;   //левое поддерево
        tree_node* right;  //правое поддерево
        T data;            
 
    };
tree_node* root; // корень
public:
    BinarySearchTree()
    {
        root = NULL;
    }
    bool isEmpty() const { return root==NULL; }
    void print_inorder();
    void inorder(tree_node*);
    void print_preorder();
    void preorder(tree_node*);
    void print_postorder();
    void postorder(tree_node*);
    void print_insert();
 
    void max (tree_node*);
    void insert(T);               
    void remove(T);
    bool search(T);
};
 
//--------------------Ввод--------------------------------------------------------------------------------
 
template <class T>
void BinarySearchTree<T>::insert(T d)
{
    tree_node* t = new tree_node;
    tree_node* parent;
    t->data = d;
    t->left = NULL;
    t->right = NULL;
    parent = NULL;
    // is this a new tree?
    if(isEmpty()) root = t;
    else
    {
        //Note: ALL insertions are as leaf nodes
        tree_node* curr;
        curr = root;
        // Find the Node's parent
        while(curr)
        {
            parent = curr;
            if(t->data > curr->data) curr = curr->right;
            else curr = curr->left;
        }
 
        if(t->data < parent->data)
            parent->left = t;
        else
            parent->right = t;
    }
 
}
 
 
template<class T>
void BinarySearchTree<T>::print_postorder()
{
    postorder(root);
}
 
template<class T>
void BinarySearchTree<T>::postorder(tree_node* p)
{
    if(p != NULL)
    {
        if(p->left) postorder(p->left);
        if(p->right) postorder(p->right);
        cout<<" "<<p->data<<" ";
    }
    else return;
}
 
 
template <class T>
void BinarySearchTree<T>::max()
{
 
    if(p!=NULL)
        {
            cout << "Дерево не заполнено";
        } else {
            cout << "MAX значение: ";
            cout << this->p->max();
        }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    system ("color F0");
    BinarySearchTree<int> b;
    int ch;
    int tmp,tmp1;
    while(1)
    {
        cout<<endl<<endl;
        cout<<" Операции над бинарным деревом "<<endl;
        cout<<" ----------------------------- "<<endl;
        cout<<" 1. Создание/Добавление "<<endl;
        cout<<" 2. Max "<<endl; 
        cout<<" 3. Обратный обход "<<endl;
cin>>ch;
        switch(ch)
        {
        case 1 : cout<<" Введите данные : ";
            cin.ignore(1);
            cin>>tmp;
            b.insert(tmp);
            break;
        case 2 :
            b.max();
            break;
        case 3 : cout<<endl;
            cout<<" Обратный обход "<<endl;
            cout<<" --------------------"<<endl;
            b.print_postorder();
            break;
        }
        }
        }
Добавлено через 24 минуты
Байт, _Ivana, можете помочь исправить ошибку в функции поиска максимального значения
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2014, 20:44

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

АТД деревья. Вывод бинарного дерева в консоль
Здравствуйте, нужна помощь! Возможно тема заезженная, но извеняйте не чего путнего не...

Бинарные деревья, глубина (высота) дерева
Есть дерево, состоящее из целых чисел , читаемых из файла. С выводом и нахождением высоты дерева...

Бинарные деревья. Нахождение высоты дерева
Добрый день. Помогите пожалуйста с задачами. 1) Используя бинарное дерево поиска,которое должно...

Бинарные деревья: найти минимум, распечатать элементы дерева
1. Написать функцию, которая находит наименьший элемент дерева. 2. Написать процедуру, которая...


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

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

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