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

Как вы учили деревья - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
25.11.2012, 00:39     Как вы учили деревья #1
Здравствуйте. Помогите освоить деревя на с++. Ну например как кто учил может есть какая нить литература по ним или код где хорошо все описано, или алгоритм как построить древо. В гугле полно информации но не все понятно. Я думаю многие сталкивались с такой проблемой да может есть ссылки на полезную инфу. Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 00:39     Как вы учили деревья
Посмотрите здесь:

C++ C++ деревья
Б деревья C++
C++ Как Вы учили С++
C++ деревья
Деревья на с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
05.12.2012, 18:23     Как вы учили деревья #21
Вроде в учебнике "Бьерн Страуструп. Язык программирования С++" есть способы реализации деревьев. Думаю, что будет неплохо почитать))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.12.2012, 18:28     Как вы учили деревья #22
Может у меня потому и получаются только коряги, что я их по косой книге учил? Подскажите книгу, где хорошо растолкована балансировка деревьев.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
05.12.2012, 19:03     Как вы учили деревья #23
Цитата Сообщение от taras atavin Посмотреть сообщение
Может у меня потому и получаются только коряги, что я их по косой книге учил? Подскажите книгу, где хорошо растолкована балансировка деревьев.
Про деревья написано у Кнута (Искусство программирования). Когда я программировал АВЛ-деревья, читал еще Вирта Н. "Алгоритмы и структуры данных".
Если нужно, могу скинуть реализацию АВЛ в ЛС + отчет по данной лабе с балансировкой (хотя, думаю, сам я описал процесс намного хуже офф. источников)
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
05.12.2012, 23:51  [ТС]     Как вы учили деревья #24
Посмотрю.

Добавлено через 4 часа 45 минут
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
 
Посмотрите пожалуйста правильно ли я понял на щет деревьев в коментах написал что где значит 
 
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
struct node                   //наша струра
{node *left;                //указатель на левый узел
node *right;                   //указатель на правыйузел
int data;                      //даные
 
};
node *root=NULL;              //никакого узла небыло создано петому указатель на корень 0
void add(node **r,int d)         //node **r - указатель на корневой указатель int d - даные
{
if((*r)==NULL)      //если укзатель елемент структруы == 0,
 
                        //а так оно и есть по тому что мы его просто обявили
 
{(*r)=new node;   //создаем указатель на новый елемнт структуры
 
                         //(то есть выделяем память под новый указатель)
 
(*r)->data=d;             //это будет данным числом корнеаого елемента таким образом
                              //получаеться мы корневому елемнту задаем значение на которое он указывает
 
(*r)->left=(*r)->right=NULL;           //присваиваем указателям нулевые адреса по скольку
                                //по скольку больше никаких даных не добавлялось то это начальние адреса
return; //ето выход из if-a
}
if(d>(*r)->data)add(&(*r)->left,d);//проверяем значение, указатель указывает
                               //на адрес этого значения
 
else
 
add(&(*r)->left,d);     //аналогично
}
void print(node *n,int d)     //печать здесь просто указатель по скольку не производиться
                              //смена указателя
 
{if(n==NULL)              //если етот указатель больше ниначто не указывает,то
 
return;                        //выходим
 
else
 
{print(n->left,d);              //рекурсивный вызов
 
cout<<n->data<<endl;     //вывод всех даных.
 
}
 
print(n->right,++d);  //рекурсивный вызов
 
}
 
int main()
{    int n,s;
cin>>n;
for(int i=0;i<n;i++)
{cin>>s;
add(&root,s);                     //передаем даные, то есть корневым елементом будет первый введёный
                                        //елемнт в цыкле.
}
print(root,0); //вот только почему здесь 0 есть? 
getch();
    return 0;
}
//---------------------------------------------------------------------------
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 21:57     Как вы учили деревья
Еще ссылки по теме:

Деревья C++
Как разобраться с тем, что такое указатели, стеки, деревья? C++
Деревья C++

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

Или воспользуйтесь поиском по форуму:
Джек
5 / 5 / 0
Регистрация: 16.08.2011
Сообщений: 77
09.12.2012, 21:57  [ТС]     Как вы учили деревья #25
Кому интересно нашел ссылку как создать древо...

http://ci-plus-plus-snachala.ru/?p=89#comment-316
Yandex
Объявления
09.12.2012, 21:57     Как вы учили деревья
Ответ Создать тему
Опции темы

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