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

Деревья-Нелинейные структуры данных - C++

Восстановить пароль Регистрация
 
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
07.10.2013, 11:17     Деревья-Нелинейные структуры данных #1
Помогите пож-ста реализовать программу.
УСЛОВИЕ:
Сформировать и вывести на экран бинарное дерево поиска, элементами которого являются случайные числа. Количество элементов дерева вводится с клавиатуры.
Реализовать прямой обход созданного дерева.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 11:17     Деревья-Нелинейные структуры данных
Посмотрите здесь:

C++ Структуры данных
C++ Структуры данных в С++
C++ ООП.Разработать структуру элементов данных класса в виде динамической структуры данных
C++ структуры данных
структуры данных в С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
07.10.2013, 11:38     Деревья-Нелинейные структуры данных #2
Примерно так:
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
struct Node
{
double value;
Node *left, *right;
};
//-ф-я создания
Node *createTree(int n)
{ 
if(n<=0) return NULL;
Node *Top=new Node;
Top->value=random(100);
int ln, rn=(n-1)/2;
if((n-1)%2==0) ln=rn; 
else ln=rn+1;
Top->left=createTree(ln);
Top->right=createTree(rn);
return Top;
}
//---обход напишешь по аналогии
 
//вызывать так:
void main()
{
    int n;
  cout<<"kolichestvo uzlov = ";
  cin>>n;
  srand(); //кажеться так называется эта ф-я, но точно не помню
  Node *Top=createTree(n);
}
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
07.10.2013, 13:46  [ТС]     Деревья-Нелинейные структуры данных #3
на
C++
1
srand()
компилятор ругается.

Добавлено через 3 минуты
Наверно имеется ввиду
C++
1
rand()
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
07.10.2013, 14:16  [ТС]     Деревья-Нелинейные структуры данных #4
Так выглядит?? В main явно наверно что-то ещё дописать нужно.
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
#include <iostream.h>
#pragma hdrstop
 struct Node
{
double value;
Node *left, *right;
};
//-Гґ-Гї ñîçäГ*Г*ГЁГї
Node *createTree(int n)
{
if(n<=0) return NULL;
Node *Top=new Node;
Top->value=random(100);
int ln, rn=(n-1)/2;
if((n-1)%2==0) ln=rn;
else ln=rn+1;
Top->left=createTree(ln);
Top->right=createTree(rn);
return Top;
}
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 int n;
  cout<<"kolichestvo uzlov = ";
  cin>>n;
  rand();
  Node *Top=createTree(n);
       system("pause");
       return 0;
}
Миниатюры
Деревья-Нелинейные структуры данных  
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
07.10.2013, 17:48     Деревья-Нелинейные структуры данных #5
Всё-таки там должен быть srand(). Нужно подключить ещё <time.h>

Добавлено через 1 минуту
Точнее вот так:
C++
1
 srand(time(NULL))
Смотри: Srand

Добавлено через 1 минуту
Цитата Сообщение от Zumuist Посмотреть сообщение
В main явно наверно что-то ещё дописать нужно
Читай строку 20 в моем коде. Я написал тебе создание дерева. Ты по аналогии напиши его обход и вывод на экран
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
08.10.2013, 14:30  [ТС]     Деревья-Нелинейные структуры данных #6
Тоже самое выводит

Добавлено через 4 часа 31 минуту
Пробую, не получается вывести. Ошибку выводит.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
08.10.2013, 17:46     Деревья-Нелинейные структуры данных #7
Цитата Сообщение от Zumuist Посмотреть сообщение
Пробую, не получается вывести. Ошибку выводит
Ну так покажи код, как пробуешь (это должна быть рекурсивная функция обхода дерева и поэлементного вывода) и в твоем коде уже поищем ошибку
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
09.10.2013, 09:57  [ТС]     Деревья-Нелинейные структуры данных #8
где ошибка??
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
//---------------------------------------------------------------------------
#include <iostream.h>
#include <time.h>
#pragma hdrstop
 struct Node
{
double value;
Node *left, *right;
};
//-Гґ-Гї ñîçäГ*Г*ГЁГї
Node *createTree(int n)
{
if(n<=0) return NULL;
Node *Top=new Node;
Top->value=random(100);
int ln, rn=(n-1)/2;
if((n-1)%2==0) ln=rn;
else ln=rn+1;
Top->left=createTree(ln);
Top->right=createTree(rn);
return Top;
}
 
void pr1 (Node *Top) {  // префиксный обход 
if Top!=0 {
cout << Top ->Elem;
pr1 (Top->left);
pr1 (Top ->Right);
   }
void pr2 (Node *Top) {   //симметричный обход
if Top!=0 {
pr2 (Top ->left);
cout << Top ->Elem;
pr2 (Top ->Right);
   }
   void pr3 (Node *Top) { // постфиксный обход
if Top!=0 {
pr3 (Top ->Left);
pr3 (Top->Right);
cout <<Top ->Elem;
   }
 }
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 int n;
  cout<<"kolichestvo uzlov = ";
  cin>>n;
  srand(time(NULL));
  Node *Top=createTree(n);
   cout << Top;
       system("pause");
       return 0;
}
//---------------------------------------------------------------------------
govorov
24 / 24 / 3
Регистрация: 25.09.2013
Сообщений: 76
09.10.2013, 10:08     Деревья-Нелинейные структуры данных #9
По-моему еще нужно <stdlib.h> подключить. srand() из этой библиотеки)
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
09.10.2013, 10:10  [ТС]     Деревья-Нелинейные структуры данных #10
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
//---------------------------------------------------------------------------
#include <iostream.h>
#include <time.h>
#pragma hdrstop
 struct Node
{
double value;
Node *left, *right;
};
//-Гґ-Гї ñîçäГ*Г*ГЁГї
Node *createTree(int n)
{
if(n<=0) return NULL;
Node *Top=new Node;
Top->value=random(100);
int ln, rn=(n-1)/2;
if((n-1)%2==0) ln=rn;
else ln=rn+1;
Top->left=createTree(ln);
Top->right=createTree(rn);
return Top;
}
 
void pr1 (Node *Top) {  // ïðåôèêñГ*ûé îáõîä
if (Top!=0) {
cout << Top;
pr1 (Top->left);
pr1 (Top ->right);
   }
   }
void pr2 (Node *Top) {   //ñèììåòðè÷Г*ûé îáõîä
if (Top!=0) {
pr2 (Top ->left);
cout << Top;
pr2 (Top ->right);
   }
   }
   void pr3 (Node *Top) { // ïîñòôèêñГ*ûé îáõîä
if (Top!=0) {
pr3 (Top ->left);
pr3 (Top->right);
cout <<Top;
   }
 }
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 int n;
  cout<<"kolichestvo uzlov = ";
  cin>>n;
  srand(time(NULL));
  Node *Top=createTree(n);
   cout << Top;
       system("pause");
       return 0;
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
вот вроде так обход по элементам пишется?? А как вывод поэлементно сделать??
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
09.10.2013, 10:57     Деревья-Нелинейные структуры данных #11
Цитата Сообщение от Zumuist Посмотреть сообщение
А как вывод поэлементно сделать??
Что значит поэлементно? У тебя в коде 3 процедуры обхода: pr1, pr2, pr3
Вызывай в main() одну из них и будет тебе поэлементный вывод в зависимости от порядка обхода
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
09.10.2013, 22:21  [ТС]     Деревья-Нелинейные структуры данных #12
Так, что ли?

C++
1
2
3
4
5
6
printf("\obhod_1=");
   cout << pr1<<endl;
   printf("\obhod_2=");
   cout << pr2<<endl;
    printf("\obhod_3=");
   cout << pr3<<endl ;
Но это явно не то.

Добавлено через 11 часов 9 минут
всё разобрался. Сделал. через print (рекурсивную функцию)
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
10.10.2013, 11:30     Деревья-Нелинейные структуры данных #13
Цитата Сообщение от Zumuist Посмотреть сообщение
Но это явно не то.
Разумеется, это не то. Вы, извините за выражение, содрали где-то функции pr1, pr2, pr3, или Вам их кто-то написал, и даже не удосужились прочитать, что в них в средине.
Что по вашему должно произойти, когда выпишите "cout << pr1"?
pr1 у Вас возвращает void, т.е. не возвращает ничего.
Но в pr1 (точно так же в pr2, pr3) уже содержится cout .
Вам достаточно было просто вызвать одну из них без всякого cout
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
10.10.2013, 12:03  [ТС]     Деревья-Нелинейные структуры данных #14
Я в дальнейшем так и сделал.

Добавлено через 3 минуты
Цитата Сообщение от Algoritmer Посмотреть сообщение
Разумеется, это не то. Вы, извините за выражение, содрали где-то функции pr1, pr2, pr3, или Вам их кто-то написал, и даже не удосужились прочитать, что в них в средине.
Что по вашему должно произойти, когда выпишите "cout << pr1"?
pr1 у Вас возвращает void, т.е. не возвращает ничего.
Но в pr1 (точно так же в pr2, pr3) уже содержится cout .
Вам достаточно было просто вызвать одну из них без всякого cout
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void print (Node *Top,int k)
{
    if (Top==NULL) return;
    else
    {
    print(t->l,++k);
    for (int i=0;i<k;++i) cout<<"___";
    cout<<Top->info<<endl;
    k--;
    }
    print(Top->right,++k); 
}
 void Show(node *&Tree)
{
    if (NULL==Tree)    return;    //Если дерева нет, выходим
 
    cout<<Tree->inf<<endl; 
    Show(Tree->left); 
    Show(Tree->right);
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
10.10.2013, 12:43     Деревья-Нелинейные структуры данных #15
Ну вот. Ф-я Show вполне прилично выглядит, и кстати, ничем не отличается от той, к-рая у Вас раньше называлась pr1
Единственный момент:
Цитата Сообщение от Zumuist Посмотреть сообщение
void print (Node *Top,int k)
Цитата Сообщение от Zumuist Посмотреть сообщение
void Show(node *&Tree)
У вас два разных типа для узла? (Node и node ) Зачем?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 13:14     Деревья-Нелинейные структуры данных
Еще ссылки по теме:

Структуры данных C++
Структуры данных (создание, просмотр, дополнение и извлечения данных из файла, содержащего информацию о номерах телефонов сотрудников учреждения,ФИО) C++
C++ Нелинейные уравнения

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

Или воспользуйтесь поиском по форуму:
Zumuist
2 / 2 / 0
Регистрация: 23.09.2013
Сообщений: 149
10.10.2013, 13:14  [ТС]     Деревья-Нелинейные структуры данных #16
У меня один Node. Второй опечатка.

Добавлено через 4 минуты
Цитата Сообщение от Algoritmer Посмотреть сообщение
Ну вот. Ф-я Show вполне прилично выглядит, и кстати, ничем не отличается от той, к-рая у Вас раньше называлась pr1
Единственный момент:


У вас два разных типа для узла? (Node и node ) Зачем?
как-то так
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
void push(int a,Node **Top)
{
    if ((*Top)==NULL) //Если дерева не существует
    {
        (*Top)=new Node;
        (*Top)->inf=a;
        (*Top)->left=(*Top)->right=NULL;
        return;
    }
     else  
        if (a<(*Top)->inf) push(a,&(*Top)->left);
        else push(a,&(*Top)->right);
}
 
 
void print (Node *Top,int k)
{
    if (Top==NULL) return;
    else
    {
    print(Top->left,++k);
    for (int i=0;i<k;++i) cout<<"__";
    cout<<Top->inf<<endl;
    k--;
    }
Yandex
Объявления
10.10.2013, 13:14     Деревья-Нелинейные структуры данных
Ответ Создать тему
Опции темы

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