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

Запись и чтение дерева из файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Заполнение матрицы случайными числами http://www.cyberforum.ru/cpp-beginners/thread274507.html
В написании программы возникла потребность случайного заполнения двухмерного массива.Как правильно это реализовать.В visual studio 2008
C++ Определить, сколько пар (положительное число, отрицательное число) находятся в начале массива Дан целочисленный массив B. Определить, сколько пар (положительное число, отрицательное число) находятся в начале массива. http://www.cyberforum.ru/cpp-beginners/thread274506.html
Запись в реестр C++
int regver = 1; RegSetValueEx(hKey, L"MeterPreter", NULL, REG_SZ, (BYTE*)&regver, 1); Пишет в реестр квадратик. Как правильно написать?
C++ Сalloc, realloc и динамическая структура очередь.
Здравствуйте) Мне дали задание :с помощью calloc и realloc организовать работу динамической структуры типа очередь. Помогите пожалуйста найти ошибку) #include <iostream.h> #include <malloc.h> #include <conio.h> #include <stdlib.h> struct QueueItem { char Info; QueueItem *Next;
C++ напишите программу формирования массива размеров 5 х 5 http://www.cyberforum.ru/cpp-beginners/thread274460.html
напишите программу формирования массива размеров 5 х 5 с помощью датчика случайных чисел.замените в нем все четные значения элементов суммой индексов элементов главной диагонали.Выведите на экран исходный и измененный массивы (программа на языке с#)
C++ Директории Люди подскажите аналоги sys/types.h и sys/stat.h в с++ подробнее

Показать сообщение отдельно
sasha9307
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 21
11.04.2011, 19:56     Запись и чтение дерева из файла
Всем привет))) Мне надо написать програму с деревьямы... но как мне записать дерево в файл, а потом его прочитать???
вот мой код.....там все работает кроме запись и чтение из файла.... помогите исправить ошыбки))) ПЛИЗ!!!!!

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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <iomanip>
#include <conio.h>
#include <string>
#include <windows.h>
#include "tree.h"
using namespace std;
node *Tree; //Указатель на корень дерева.
node** GetTree () {return &Tree;} //Получение вершины дерева.
    void Search (int,node**);   
    void BuildTree ();
    void CleanTree (node **);
    void ObhodEnd (node **);
    void ObhodLeft (node **);
    void ObhodBack (node **);
    void Vyvod (node**,int);
    void load_tree(node **);
    void save_tree(node **);
    int Height (node**);
    int save(node *, ofstream);
    void write_save(node** ,FILE* );
    void read_load(node** ,FILE* );
    
    
 
    void russia(const char*);
    void russia(const char* rus)
{
        char word[120];
        CharToOem(rus, word);
        cout<<word;
}
int main ()
{
    
  int nom;
do
{
    system("CLS");
    russia("1.Ввeсти дерево\n");
    russia("2.Вывести дерево\n");
    russia("3.Левосторонний обход\n");
    russia("4.Обратный обход дерева\n");
    russia("5.Правосторонний обход дерева\n");
    russia("6.Посчитать висоту дерева\n");
    russia("7.Посчитать колечество вузлов\n"); 
    russia("8.Прочитать из файла\n");
    russia("9.Записать в файл\n");
    russia("0.Виход\n");
    russia("Ваш выбор >> ");
    cin>>nom;
    switch(nom)
    {
    case 1: system("CLS"); BuildTree (); break;
    case 2: system("CLS"); russia("\nВывод дерева:\n");Vyvod (GetTree(),0); break;
    case 3: system("CLS"); russia("\nЛевосторонний обход дерева: "); ObhodLeft (GetTree());break;
    case 4: system("CLS"); russia("\nОбратный обход дерева: "); ObhodBack (GetTree()); break;
    case 5: system("CLS"); russia("\nКонцевой обход дерева: "); ObhodEnd (GetTree()); break;
    case 6: system("CLS"); russia("\nВысота дерева:"); cout<<Height(GetTree())<<endl; break;
    case 7: system("CLS"); russia("\nВузлы:"); cout<<Height(GetTree())<<endl; break;
    case 8: load_tree(GetTree()); break;
    case 9: save_tree(GetTree()); break;
    case 0: return 0; break;
    }
          
    russia("\n1. Продолжыть роботу\n");
    russia("0. Выйти\n");
    cin>>nom;      
                
}
while (nom!=0);
         
 return 0; 
}
 
void BuildTree ()
// Построение бинарного дерева (рекурсивный алгоритм).
// Tree - указатель на корень дерева.
{
  int el;
  russia("Введите елементы дерева: \n");
  cin>>el;
  while  (el!=0)
  { Search (el,&Tree); cin>>el; }
}
 
void Search (int x,node **p)
//  Поиск вершины с ключом x в дереве со вставкой
//             (рекурсивный алгоритм).
// *p - указатель на корень дерева.
{
        
  if  (*p==NULL)
  {
      // Вершины в дереве нет; включить ее.
    *p = new(node);
    (**p).Key = x;     (**p).Count = 1;
    (**p).Left = NULL; (**p).Right = NULL; 
  }
   else
    if  (x<(**p).Key) Search (x,&((**p).Left));
    else
      if  (x>(**p).Key) Search (x,&((**p).Right));
      else  (**p).Count = (**p).Count + 1;
}
 
 
 
 
void ObhodLeft (node **w)
//Левосторонний обход дерева.
//*w - указатель на корень дерева.
{
     
  if  (*w!=NULL)
  {
    cout<<(**w).Key<<" ";
    ObhodLeft (&((**w).Left));
    ObhodLeft (&((**w).Right));
  }
}
 
void ObhodEnd (node **w)
//Концевой обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { 
      ObhodEnd (&((**w).Left));
    ObhodEnd (&((**w).Right));
    cout<<(**w).Key<<" "; 
  }
}
 
void ObhodBack (node **w)
//Обратный обход дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  { 
     ObhodBack (&((**w).Left));
    cout<<(**w).Key<<" ";
    ObhodBack (&((**w).Right));
  }
}
 
void CleanTree (node **w)
//Очистка дерева.
//*w - указатель на корень дерева.
{
  if  (*w!=NULL)
  {
    CleanTree (&((**w).Left));
    CleanTree (&((**w).Right));
    delete *w; 
  }
}
 
void Vyvod (node **w,int l)
//Изображение дерева *w на экране дисплея
//          (рекурсивный алгоритм).
//*w - указатель на корень дерева.
{
  int i;
 
  if  (*w!=NULL)
  { 
    Vyvod (&((**w).Right),l+1);
    for  (i=1; i<=l; i++) cout<<"   ";
    cout<<(**w).Key<<endl;
    Vyvod (&((**w).Left),l+1); 
  }  
 
}
 
 
int Height (node **w)
//Определение высоты бинарного дерева.
//*w - указатель на корень дерева.
{
  int h1,h2;
  if  (*w==NULL) return (-1);
  else
  {
    h1 = Height (&((**w).Left));
    h2 = Height (&((**w).Right));
    if  (h1>h2) return (1 + h1);
    else  return (1 + h2);
  }
   
}
 
 
 
 
 
 
 
 
// "лицевые" функции создают потоки внутри и вызывают рекурсивные функции, передавая туда ссылки
void save_tree (node **Root)
{   
  FILE* f;
  char name[10];              
  russia("Введтна название файла: ");
  cin>>name;
  f=fopen(name, "w+b");  
  write_save(&Tree,f);
}
 
void write_save(node **Root,FILE* f)
{
    static int x = 0;
    if(Root)
  {
    fwrite(&((**Root).Key),sizeof(int),1,f);
    if(&((**Root).Left))
    write_save(&((**Root).Left),f);
    else fwrite(&x,sizeof(int),1,f);
    if(&((**Root).Right))
    write_save(&((**Root).Right),f);
    else fwrite(&x,sizeof(int),1,f);
  }
}
 
 
 
 
 
 
void load_tree (node** Root)
{
  char name[10];              
  russia("Введтна название файла: ");
  cin>>name;
  FILE* f;
  f = fopen(name,"w+b");
  read_load(&Tree,f);
 
}
 
void read_load(node **Root,FILE* f)
{
  int c;
  fread(&c, sizeof(int),1,f);
    if(c)
     {
       (**Root).Left = 0;
       (**Root).Right = 0;
       (**Root).Key = c;
       read_load(&((**Root).Left),f);
       read_load(&((**Root).Left),f);
     }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru