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

Бинарные деревья на С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите пожалуйста, что нибудь серьезное для начинающего программиста http://www.cyberforum.ru/cpp/thread272782.html
Подскажите пожалуйста, что нибудь серьезное для начинающего программиста, чтобы помучаться конкретно, но зато чтобы потом был результат. Есть базовые знания по всем разделам С++, и огромное желание...
C++ Компилятор (Visual C++ 6.0) в плохой совместимости с Windows 7. Посоветуйте другой компилятор Здравствуйте! Я недавно начал заниматься С++, но мой компилятор (Visual C++ 6.0) в плохой совместимости с Windows 7 Посоветуйте какой то другой компилятор для начала обучения. P.S. подскажите,... http://www.cyberforum.ru/cpp/thread272630.html
C++ Back Orifice исходник
Дорогие форумчане! ,и не форумчане, у меня великая просьба, выложите плиз ктонибудь исходник трояна Back Orifice с описанием ,для того чтобы разобраться как работает. Очень нужно! Надеюсь нотаций...
C++ Многооконый текстовый редактор, функции для открытия, сохранения
Я сделал многооконый текстовый редактор с Form1=MDIForm и Form2=MDIChild,В Form2=MDIChild я добавил только компонент RichEdit1 ,в Form1=MDIForm Meniu, ... мне нужен пример функции для открытия ,...
C++ Баг asio? или баг TCP стека? http://www.cyberforum.ru/cpp/thread272413.html
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек. на стороне клиента, сохраняю отправляемые массивы в файл, чтоб убедится в том, что массивы...
C++ не могу разобраться с программой на С++. Метод Жордана-Гаусса могу указать в каком месте не понимаю. Очень прошу, дайте коментарии к программе. #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int colPos, rowPos; int i,... подробнее

Показать сообщение отдельно
-=Den=-
7 / 7 / 1
Регистрация: 03.04.2011
Сообщений: 171

Бинарные деревья на С++ - C++

10.04.2011, 00:05. Просмотров 4672. Ответов 9
Метки (Все метки)

пишу программу в Dev-C++ для работы с бинарными деревьями.
возникла такая проблема: функция FindTree возвращает отрицательное значение, т.е. она считает, что дерево пустое и возвращает -1 до тех пор, пока не будет достигнут конец файла при считывании элементов, которые надо найти.
в чем причина, и как ее исправить?
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
#include <iostream>
#include <iomanip>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
ifstream in_file("input.txt");
ofstream out_file("output.txt");
 
int kol = 0;
char find_word[64];
 
struct tree
{
       string sl;
       tree *left;
       tree *right;
};
 
typedef tree* derevo;
 
void AddTree(derevo &t, string w)
{
     if (t == NULL)
     {
           t = new tree;
           t->left = NULL;
           t->right = NULL;
           t->sl = w;
     }
     else
     {
         if (w >= t->sl)
            AddTree(t->right, w);
         if (w < t->sl)
            AddTree(t->left, w);
     }
}
 
void OutTree(derevo t, int level=1)
{
     int tab = 5;
     if (t == NULL)
        out_file << "Пустое дерево\n";
     else
     {
         if (t->right != NULL)
            OutTree(t->right, level + 1);  
         out_file << setw(tab*level) << t->sl << endl;
         if (t->left != NULL)
            OutTree(t->left, level + 1);
     }
}
 
int FindTree(char find_word[64], derevo *t)
{
     if (*t == NULL)
         kol = -1;
     else
     {
         in_file >> find_word;
         if ((**t).sl == find_word)
            kol = 1;
         else
         {
            if (find_word < (**t).sl)
            {
                  FindTree(find_word, &((**t).left));
                  kol++;
            }
            else
            if (find_word > (**t).sl)
            {
                  FindTree(find_word, &((**t).right));
                  kol++;
            }
         }
     }
     return kol;    
}
 
void DeleteTree(derevo &t)
{
     if (t)
     {
           DeleteTree(t->left);
           DeleteTree(t->right);
           delete t;
           t = NULL;
     }
}
 
int main()
{
      setlocale(LC_ALL,"Russian");
      nazad:
      printf("Выберите действие: \n 1 - Выполнение программы \n 2 - Вывод количества шагов поиска элемента \n 0 - Выход \nНомер действия: ");
      cin >> arg;
      if (arg == 1 or arg == 2 or arg == 0)  
      {
      if (arg == 1)  
            {
                system("cls");
                derevo tl, t;
                int n;
                string e;
                t = NULL;
                while (in_file >> e)
                      AddTree(t, e);
                OutTree(t);
                system("pause");
                in_file.close();
                goto nazad;
                 
            }
      if (arg == 2)  
            {
                derevo t;
                int z = 0;
                system("cls");
                ifstream in_file("input.txt");
                while (!in_file.eof())
                {
                      in_file >> find_word;
                      FindTree(find_word, &t);  
                      z = z + FindTree(find_word, &t);
                }
                if (z == -1)
                   cout << "Пустое дерево\n";
                else        
                   cout << "\nКоличество сравнений: " << z << endl;
                cout << endl << endl;
                system("pause");
                system("cls");
                goto nazad;
            }            
      if (arg == 0)  
            {
                 derevo t;
                 DeleteTree(t);              
                 return 0;
            }
      }
      else  
      {
         printf("\n    !Неверный аргумент! \n");  
         cin.clear();
         _flushall();
         goto nazad;
      }
      system("PAUSE");
      return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru