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

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

04.06.2009, 03:09. Просмотров 11251. Ответов 10
Метки нет (Все метки)

Помогите пожалуйста. Если у кого завалялся алгоритм построения бинарного дерева поиска. Поделитесь. Очень нужно. Желательно что-бы цифры ставились рендомом. Но, как получится.
Благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2009, 03:09
Ответы с готовыми решениями:

Алгоритм бинарного дерева поиска
Здравствуйте! Помогите найти информацию по поводу данного алгоритма, может быть какие-то...

Распечатка бинарного дерева поиска
Много где висит функция void print(int deep, ptree p) { if(p) { print(deep + 1, p->l); ...

Создание бинарного дерева поиска
Людииииии помогите пож-таааа.....Нужно создать бинарное дерево поиска, считывая элементы из текст...

Итератор дерева бинарного поиска
Если у нас в качестве коллекции выступают вектора, очереди, стеки и т.п. то там вроде бы всё...

10
Эксперт С++
2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,497
04.06.2009, 11:36 2
http://ru.lmgtfy.com/?q=%D0%BF... 0%BA%D0%B0
0
1 / 1 / 1
Регистрация: 04.05.2009
Сообщений: 6
04.06.2009, 15:44  [ТС] 3
Хотелось бы иметь целостный код. А-то что-то все найденое у меня не вызывает доверия
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
18.12.2009, 12:36 4
Хочу обратить внимание читающих, что код приведенный по ссылке выше (Курганский инс-т)
Не является верным!!!. Проверял и под C и под C++ .
В обоих случаях валится 1)на *Tree = NULL;
2) на void Search (int x, node **p)
{
if (*p==NULL)//тоже валится!!!
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 12:58 5
тут прмер есть:
Дерево бинарного поиска
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
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 - все компилируется и выполняется
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 15:03 7
там совет про Insert не верно дан. используй дерево из моего поста.
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
18.12.2009, 15:35 8
Из какого поста? Да и зачем приводить ссылки на неработающие программы.?
Чтобы зря теряли время на разбирательство? Лучше сразу выложить работающую
0
372 / 286 / 97
Регистрация: 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; //удаление дерева, используется деструктор.
}
1
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
18.12.2009, 17:49 10
Но только опять ошибки
Компилятор говорит на
if (LL) LL->~node();

что destructor name must mutch the class name
и то же в case 2: T->~tree();
0
372 / 286 / 97
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 18:16 11
что за компилятор?
я писал в DEV-C++ 4.9.9.2
имя деструктора должно совпадать и именем класса, ... хз поменяй может поможет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2009, 18:16

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

Реализация бинарного дерева поиска
Не выводит значения узлов деревьев, как я понял происходит утечка памяти, но я не пойму, что нужно...

Реализация бинарного дерева поиска
Задача: Реализация бинарного дерева поиска Компилируется нормально, а при запуске выбивает ошибку...

Вычисление высоты бинарного дерева поиска на С++
Никак не могу вывести нормально высоту дерева, уже второй день маюсь, подскажите пожалуйста, в чем...

Удаления узла из бинарного дерева поиска
Уже довольно много времени убил на эту задачу, теорию понимаю, на практике реализовать никак не...


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

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

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