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

Идеально сбалансированное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция, которая позволяет выбрать имплементацию члена класса http://www.cyberforum.ru/cpp-beginners/thread630244.html
Код ниже компилируется Хочется добавить фунцию в мейн , которая бы выбирала имплементацию конструктора Line class между колон синтаксисом и обычным Другими словами, чтобы в файле Line_cpp Функция по заданнаму желаю юзера выбирала между этом кодом Line::Line (const Point& NewStartPoint,const Point& NewEndPoint): StartPoint(NewStartPoint),EndPoint(NewEndPoint) { // StartPoint = ...
C++ Программа задание-ответ И снова здрасти :) Возникла необходимость создания программы по типу Вопрос-Ответ. Т.е. программа задаёт вопрос, в случае если ответят верно - переход к след. вопросу, если нет - ещё 1 попытка или сообщение что ответ не верный(можно и без этого конечно). Всего 4 вопроса. Если у кого есть свободное время, не могли бы Вы написать хотя бы начальный код (для 1 вопроса). В качестве примера можно... http://www.cyberforum.ru/cpp-beginners/thread630220.html
Красивое GUI на с++ C++
Сегодня задался вопросом,кто как создается красивое гуи на с++?Без использование QT и .NET платформы.
Обработка сообщений в стиле WinAPI C++
Здравствуйте. Делаю небольшую игрушку. Использую принцип обмена сообщениями между объектами. В итоге получил то, что некоторые объекты должны переопределять метод, который определяет, может ли объект обработать данное сообщение. Чтобы немного проще было понять вот примерная картина: class Base { public: virtual bool CanHandle(int messageCode)=0; }; class Derived : public Base { public:
C++ Совершенные числа http://www.cyberforum.ru/cpp-beginners/thread630146.html
Здравствуйте. Пытаюсь решить следующую задачку: реализовать метод, который получает число n и возвращает все совершенные числа в диапазоне 0..n. (совершенное число равно сумме своих делителей напр. 6 = 1 + 2 + 3) Думал что получилось, но увидел что программа выводит также число 24, которое не является совершенным. Код: #include <iostream> using namespace std; int main() { int m =0;...
C++ Поиск подстрок Задание подсчитать все подстроки с использованием функции strstr(). Делаю так: int NumSubStr(char *str1, char *str2){ int result = 0; while(strstr(str1,str2)){ result++; str1= str1 + (int)(strstr(str1,str2) - str1) + Length(str2); подробнее

Показать сообщение отдельно
DREADREAD
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 12
29.07.2012, 11:51     Идеально сбалансированное дерево
Интересует как работает этот кусок кода) по идеи
C
1
Create(&tmp->right, nr);
сюда компилятор никогда не доберется? и еще как она выходит из цикла без return;


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Create(TREE **current, int n)
{
     int count = 0;
if(n==0)
*current=NULL;
else
{
int nl=n/2;
int nr=n-nl-1;
TREE *tmp=new TREE;
tmp->info=rand()%100;
count++;
Create(&tmp->left, nl);
Create(&tmp->right, nr);
*current=tmp;
}
}










Вот сама программа

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
140
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct TREE {
int info;
TREE *right;
TREE *left;
};
 
TREE *root=NULL;
int count=0;
 
void Create(TREE **current, int n)
{
     int count = 0;
if(n==0)
*current=NULL;
else
{
int nl=n/2;
int nr=n-nl-1;
TREE *tmp=new TREE;
tmp->info=rand()%100;
count++;
Create(&tmp->left, nl);
Create(&tmp->right, nr);
*current=tmp;
}
}
 
void ShowonWard(TREE *current, int l)
{
if(current!=NULL)
{
for(int i=0;i<l;i++)
cout << "\t";
cout << current->info << endl;
ShowOnward(current->left, l+1);
ShowOnward(current->right, l+1);
}
}
 
void ShowSymmetric(TREE *current, int l)
{
if(current!=NULL)
{
ShowSymmetric(current->left, l+1);
for(int i=0;i<l;i++)
cout << "\t";
cout << current->info << endl;
ShowSymmetric(current->right, l+1); 
}
}
 
void ShowBackSymmetric(TREE *current, int l)
{
if(current!=NULL)
{
ShowBackSymmetric(current->right, l+1);
for(int i=0;i<l;i++)
cout << "\t";
cout << current->info << endl;
ShowBackSymmetric(current->left, l+1); 
}
}
 
void ClearTree(TREE **current)
{
     int count=0;
if(*current!=NULL)
{
ClearTree(&(*current)->left);
ClearTree(&(*current)->right);
delete *current;
count--;
}
if(count==0)
*current=NULL;
 
}
 
int main()
{
setlocale(LC_ALL,"Russian");
int num;
char otv;
do
{
cout << "1. Ïîñòðîèòü äåðåâî" << endl
<< "2. Îáõîä Гў ïðÿìîì Г*Г*ГЇГ°Г*âëåГ*ГЁГЁ" << endl
<< "3. Îáõîä Гў ñèììåòðè÷Г*îì ïîðÿäêå" << endl
<< "4. Îáõîä Гў îáðГ*ГІГ*Г®-ñèììåòðè÷Г*îì ïîðÿäêå" << endl
<< "0. Âûõîä"
<< " = ";
cin >> otv;
switch(otv)
{
case 49:
cout << endl << "×èñëî âåðøèГ* äåðåâГ* = ";
cin >> num;
ClearTree(&root);
Create(&root, num);
cout << endl << "Äåðåâî ñîçäГ*Г*Г®" << endl;
break;
case 50:
if(root!=NULL)
{
ShowOnward(root, 0);
}
else
cout << endl << "Äåðåâî ïóñòîå" << endl;
break;
case 51:
if(root!=NULL)
{
ShowSymmetric(root, 0);
}
else
cout << endl << "Äåðåâî ïóñòîå" << endl;
break;
case 52:
if(root!=NULL)
{
ShowBackSymmetric(root, 0);
}
else
cout << endl << "Äåðåâî ïóñòîå" << endl;
break;
case 54:
break;
default:
cout << endl << "ГЋГёГЁГЎГЄГ*" << endl;
break;
}
 
}while(otv!=59);
cin.get();
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru