Форум программистов, компьютерный форум CyberForum.ru

Дерево бинарного поиска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Напечатать суммы и количество чисел расположенных между соседними нулями http://www.cyberforum.ru/cpp-beginners/thread75938.html
Прошу Вас, помогите пожалуйста бедному студенту с лабой :( В массиве все элементы – положительные целые числа и нули. Напечатать суммы и количество чисел расположенных между соседними нулями Размерности массивов вводить с клавиатуры. Элементы массивов по желанию пользователя вводить с клавиатуры или генерировать случайным образом в заданных пределах. Исходные данные и результаты выводить на...
C++ Floating point error:Domain.Abnormal program termination - ??? это что значит? Floating point error: Domain. Abnormal program termination #include <stdio.h> #include <conio.h> #include <math.h> void main() { /* объявление и инициализация переменных */ double t = 11, x, y, F; http://www.cyberforum.ru/cpp-beginners/thread75926.html
C++ Доброго времени суток
Народ! Помогите пожалуйста начинающему программисту... Здесь представлен код для вывода в консоль файлов из папки... #include <iostream> #include <windows.h> //#include <> using namespace std; int main() { WIN32_FIND_DATA winFileData; HANDLE hFile;
срочно ! C++
ДАно предложение. В нем только 2 слова одинаковые. НАйти эти слова. Помогите
C++ Разбить заданное число на цифры и записать их в массив http://www.cyberforum.ru/cpp-beginners/thread75881.html
всем привет! у меня єсть задача в с++ и я не могу єє розвязать Дано число n и надо его разбить на части(посимвольно) и замисать в масив
C++ Упорядочить массив помогите решить задачу на языке СИ: Упорядочить исходный массив так, чтобы вначале шли по возрастанию элементы, стоящие на чётных местах, а потом, стоящие на нечётных местах. подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
17.12.2009, 20:35     Дерево бинарного поиска
вот тебе рабочий вариант, он должен помоч, я надеюсь:
//если не понятно - спрашивай.
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
#include<iostream>
using namespace std;
 
template <class T,class I> class node
{
      private:
              T x; //ключ
              I info;//информация
              node* LL; //left link
              node* RL; //right link
      public:
             node(){x=0;LL=0;RL=0;};
             ~node()
             {
                  if (LL) LL->~node();
                  if (RL) RL->~node();
                  if (LL) {delete LL; LL=0;}
                  if (RL) {delete RL; RL=0;}
             }
             void putx(T new_x,I new_info){this -> x=new_x;this -> info=new_info;}
             void null_leftlink(){this -> LL=0;}
             void null_rightlink(){this -> RL=0;}
             void add(T new_x, I new_info)
             {
                  if (LL&&(new_x < x)) LL->add(new_x,new_info);
                  if (RL&&(new_x > x)) RL->add(new_x,new_info);
                  
                  if (!LL&&(new_x < x))
                  {
                          node* N=new node;
                          N->x=new_x;
                          N->info=new_info;
                          N->LL=0;
                          N->RL=0;
                          LL=N;
                  }
                  if (!RL&&(new_x > x))
                  {
                          node* N=new node;
                          N->x=new_x;
                          N->info=new_info;
                          N->LL=0;
                          N->RL=0;
                          RL=N;
                  }
             }
             void print(int tab)
             {
                  if (RL) RL-> print(tab + 1);
                     for(int i=1;i!=tab;i++)cout << "  "; cout <<this->x << "-"<< this->info << endl;
                  if(LL) LL->print(tab + 1);      
             }
             void del_all()
             {
                  if (LL) LL->del_all();
                  if (RL) RL->del_all();
                  if (LL) {delete LL; LL=0;}
                  if (RL) {delete RL; RL=0;}
             }
             void del(T x_to_del)
             {
                  if (LL) LL->del();
                  if (RL) RL->del();
                  //не дописано еще.
             }
             I get(T getx)
             {
                  if (getx==x) return info;
                  if (LL&&(getx < x)) return LL->get(getx);
                  if (RL&&(getx > x)) return RL->get(getx);
             }
};
 
template <class T,class I> class tree
{
      private:
              node <T,I>* link;
      public:
             tree(){link=0;};
             ~tree(){if (link)link->~node<T,I>();delete link; link=0;};
             void add(T new_x,I new_info)
             {
                  if (link) link->add(new_x,new_info);
                  else
                  {
                      node<T,I>* N=new node<T,I>;
                      N->putx(new_x,new_info);
                      N->null_leftlink();
                      N->null_rightlink();
                      link=N;
                  }
             };
             void print(){if(link)link->print(1);else cout << "No tree existing\n";}
             void del_all(){if(link) link->del_all(); delete link; link=0;}
             void del(int x){if (link)link->del(x);};
             I get(T x){if (link) return link->get(x);else cout << "No elements existing\n";}
};
 
int main()
{
    system("cls");//clear screen
    tree <int,char> *T=new tree <int,char>; // создание дерева
    //menu
    int choos=0;
    const int exit=6;
    while (choos!=exit)
    {
          cout << "Hello! This is a 'tree' example\n"
                  "There is a menu for you to choos:\n"
                  "  1-add;\n"
                  "  2-use destructor;\n"
                  "  3-print;\n"
                  "  4-delete all;\n"
                  "  5-get element;\n"
                  "  6-exit;\n"
                  "enter-> "; cin >> choos; system("cls");
          switch (choos){
                 case 1: {
                         int key; //ключ.
                         char val; //значение
                         cout << "enter key: "; cin >> key;
                         cout << "enter int value: "; cin >> val; 
                         T->add(key,val); 
                         break;
                 }
                 case 2: T->~tree(); break;
                 case 3: T->print(); break;
                 case 4: T->del_all(); break;
                 case 5:{
                      cout << "what is key of element? "; 
                      int key=0;
                      cin >> key;
                      cout << "there it is: " << T->get(key) << endl;
                      break;}
                 default: if (choos!=exit)cout << "wrong int value " << choos << endl;
          }
    }
    delete T; //удаление дерева, используется деструктор.
}
у меня работает (DEV-C++ 4.9.9.2), в main() меню для работы с деревом.
 
Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru