Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 83, средняя оценка - 4.99
Avariya
1 / 1 / 0
Регистрация: 04.05.2009
Сообщений: 6
#1

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

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

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

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

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

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

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

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

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

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

что destructor name must mutch the class name
и то же в case 2: T->~tree();
0
Aye Aye
370 / 284 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 18:16 #11
что за компилятор?
я писал в DEV-C++ 4.9.9.2
имя деструктора должно совпадать и именем класса, ... хз поменяй может поможет.
0
18.12.2009, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2009, 18:16
Привет! Вот еще темы с ответами:

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

Итератор для бинарного дерева поиска. - C++
Господа, нужен совет знатоков. Бинарное дерево поиска представлено следующей структурой. template &lt;typename ValueType&gt; struct Node {...

Удаление элементов из бинарного дерева (не дерево поиска) - C++
Задание заключается в создании бинарного дерева, из букв введенной строки, обходе дерева и удалении согласных букв из дерева. проблема...

Некорректное удаление элемента бинарного дерева поиска - C++
Задача состоит в том, чтобы удалить максимальный в левом поддереве элемент и все его порожденные элементы. Я нахожу этот элемент и...


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

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

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