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

(ищу) Алгоритм построения бинарного дерева поиска - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 83, средняя оценка - 4.99
Avariya
 Аватар для Avariya
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 6
04.06.2009, 03:09     (ищу) Алгоритм построения бинарного дерева поиска #1
Помогите пожалуйста. Если у кого завалялся алгоритм построения бинарного дерева поиска. Поделитесь. Очень нужно. Желательно что-бы цифры ставились рендомом. Но, как получится.
Благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2009, 03:09     (ищу) Алгоритм построения бинарного дерева поиска
Посмотрите здесь:

Распечатка бинарного дерева поиска C++
Англо-русского словарь методом дерева бинарного поиска C++
C++ Итератор для бинарного дерева поиска.
Создание бинарного дерева поиска C++
C++ Реализация бинарного дерева поиска
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
04.06.2009, 11:36     (ищу) Алгоритм построения бинарного дерева поиска #2
http://ru.lmgtfy.com/?q=%D0%BF%D0%BE...81%D0%BA%D0%B0
Avariya
 Аватар для Avariya
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 6
04.06.2009, 15:44  [ТС]     (ищу) Алгоритм построения бинарного дерева поиска #3
Хотелось бы иметь целостный код. А-то что-то все найденое у меня не вызывает доверия
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
18.12.2009, 12:36     (ищу) Алгоритм построения бинарного дерева поиска #4
Хочу обратить внимание читающих, что код приведенный по ссылке выше (Курганский инс-т)
Не является верным!!!. Проверял и под C и под C++ .
В обоих случаях валится 1)на *Tree = NULL;
2) на void Search (int x, node **p)
{
if (*p==NULL)//тоже валится!!!
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 12:58     (ищу) Алгоритм построения бинарного дерева поиска #5
тут прмер есть:
Дерево бинарного поиска
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
18.12.2009, 14:48     (ищу) Алгоритм построения бинарного дерева поиска #6
посмотрел ваш пример. На C# написан?
В консольном С++ под Windows (консольное, C++Builder) выдает ошибку компилятора на примере
C++
1
2
3
4
5
6
7
void main()
{
 int el[]={5,4,7,2,3,10,8,9,6,-2,20,-5,12,-15,0};
 int * p=el;
 ST<int,int>T(10);
 for (int i=0;i<=14;i++)
     {T.insert(el[i]);}
-------------------------------
на операторе if (x.key() < h->item.key())
компилятор не пропускает, говорит - Structure requered on left side of .
Самое интересное при вызове только конструктора (ST<int,int>T(10) без обращения к методу
Insert - все компилируется и выполняется
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 15:03     (ищу) Алгоритм построения бинарного дерева поиска #7
там совет про Insert не верно дан. используй дерево из моего поста.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
18.12.2009, 15:35     (ищу) Алгоритм построения бинарного дерева поиска #8
Из какого поста? Да и зачем приводить ссылки на неработающие программы.?
Чтобы зря теряли время на разбирательство? Лучше сразу выложить работающую
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 17:23     (ищу) Алгоритм построения бинарного дерева поиска #9
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; //удаление дерева, используется деструктор.
}
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
18.12.2009, 17:49     (ищу) Алгоритм построения бинарного дерева поиска #10
Но только опять ошибки
Компилятор говорит на
if (LL) LL->~node();

что destructor name must mutch the class name
и то же в case 2: T->~tree();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2009, 18:16     (ищу) Алгоритм построения бинарного дерева поиска
Еще ссылки по теме:

C++ Удаления узла из бинарного дерева поиска
C++ Итератор дерева бинарного поиска
C++ Удаление элементов из бинарного дерева (не дерево поиска)

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

Или воспользуйтесь поиском по форуму:
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 18:16     (ищу) Алгоритм построения бинарного дерева поиска #11
что за компилятор?
я писал в DEV-C++ 4.9.9.2
имя деструктора должно совпадать и именем класса, ... хз поменяй может поможет.
Yandex
Объявления
18.12.2009, 18:16     (ищу) Алгоритм построения бинарного дерева поиска
Ответ Создать тему
Опции темы

Текущее время: 19:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru