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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить номер первого из столбцов матрицы, содержащих хотя бы один нулевой элемент http://www.cyberforum.ru/cpp-beginners/thread370474.html
Задача с двумерным массивом на C (не C++). Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. Если кто знает, помогите, пожалуйста!
C++ Динамическое выделение памяти в dll Читая Рихтера наткнулся вот на такое замечание:NOTE: Важно понимать, что единое адресное пространство состоит из одного исполняемого модуля и нескольких DLL-модулей. Одни из них могут быть скомпонованы со статически подключаемой библиотекой С/С++, другие — с DLL-версией той же библиотеки, а третьи (написанные нс на С/С++) вообще ею не пользуются Многие разработчики допускают ошибку, забывая,... http://www.cyberforum.ru/cpp-beginners/thread370440.html
C++ Транспонирование матрицы
int _tmain(int argc, _TCHAR* argv) { const int n=5; int a; srand(GetTickCount()); for (int i=0; i < n; i++) for (int j=0; j < n; j++) a=rand()%10; for (int i=0;i<n;i++) {
C++ Перегрузка оператора ==, в классе Матрица
#ifndef MATRIX_H #define MATRIX_H template <class T> class Matrix { public: Matrix(int Rows, int Cols); ~Matrix(); int RowsCount()const;
C++ Проблема с вводом текста. http://www.cyberforum.ru/cpp-beginners/thread370430.html
Привет всем!!! извините конечно, за столь простой вопрос.. забыл и никак вспомнить не могу, как в Объект инспекторе выставить значения текста в кнопке не по центру как по умолчания выравнивается, а по длине кнопки.. Заранее благодарю..
C++ Какие есть библиотеки для работы с MYSQL Всем привет. Я ищу простую (С++) библиотеку для работы с MYSQL. Программа консольная, среда Visual Studio 9-10 Сурс из официального сайта мускула, буст и ACE не вариант. Заранее благодарю.:drink: подробнее

Показать сообщение отдельно
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
26.10.2011, 12:08  [ТС]
Столкнулся с новой проблемой. Необходимо обойти бинарное дерево и сохранить последовательность прохождения вершин в файл. У меня записывает только корень дерева.

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
#include <iostream>
#include <clocale>
#include <conio.h>
#include <fstream>
using namespace std;
 
struct node
{
    int Key; 
    int Count; 
    int bal; 
    node *Left, *Right;
};
 
class TREE 
{
  private:
    // h - ГґГ«Г*ГЈ, Г±ГЁГЈГ*Г*ëèçèðóþùèé îá óâåëè÷åГ*ГЁГЁ âûñîòû ïîääåðåâГ*:
    // true - âûñîòГ* ïîääåðåâГ* óâåëè÷èëГ*Г±Гј, 
    // false - âûñîòГ* ïîääåðåâГ* Г*ГҐ óâåëè÷èëГ*Г±Гј.
    bool h;
    node *Tree;
  public:
    TREE() {Tree = NULL; h = false;}
    void Search (int, node **);
    void Print (node **, int);
    void Traversal (node **);
    node** GetTree() {return &Tree;}
};
 
int main ()
{
    setlocale(LC_ALL, "Russian");
    TREE A;
    int el, n;
    cout<< "Êîëè÷åñòâî âåðøèГ* Гў äåðåâå: "; 
    cin>> n;
    cout<< "Г€Г*ôîðìГ*öèîГ*Г*ûå ïîëÿ âåðøèГ* äåðåâГ*:\n";
    for (int i=0; i < n; i++)
    { 
        cin>> el;
        A.Search (el, A.GetTree());
    }
    cout<< "\nÀÂË-äåðåâî:\n\n"; 
    A.Print (A.GetTree(), 0);
    A.Traversal (A.GetTree());
    getch();
    return 0;
}
 
void TREE::Search (int x, node **p)
// x - êëþ÷ âåðøèГ*Г», ïîìåùГ*åìîé Гў ÀÂË-äåðåâî.
// *p - ГіГЄГ*Г§Г*òåëü Г*Г* êîðåГ*Гј ÀÂË-äåðåâГ*.
// h - ГґГ«Г*ГЈ, Г±ГЁГЈГ*Г*ëèçèðóþùèé îá óâåëè÷åГ*ГЁГЁ âûñîòû ïîääåðåâГ*:
// true - âûñîòГ* ïîääåðåâГ* óâåëè÷èëГ*Г±Гј, 
// false - âûñîòГ* ïîääåðåâГ* Г*ГҐ óâåëè÷èëГ*Г±Гј.
// Ïðè ïåðâîì îáðГ*Г№ГҐГ*ГЁГЁ ГЄ ГґГіГ*êöèè Search() h=false.
{
    node *p1, *p2;
    h = false;
    if (*p == NULL) // åñëè ГіГЄГ*Г§Г*òåëü Г*Г* äåðåâî Г°Г*ГўГҐГ* 0
    {  
        *p = new(node);
        h = true; 
        (**p).Key = x; 
        (**p).Count = 1; 
        (**p).Left = (**p).Right = NULL;
        (**p).bal = 0; 
    }
    else 
    if (x <= (**p).Key) 
    {
        Search (x, &((**p).Left)); 
        if (h == true)
            switch ((**p).bal) 
            { 
                case 1 :  (**p).bal = 0; h = false; break; 
                case 0 : (**p).bal = -1; break; 
                case -1: 
                          p1 = (**p).Left; 
                          if ((*p1).bal==-1) 
                          {    
                              (**p).Left = (*p1).Right; 
                              (*p1).Right = *p; 
                              (**p).bal = 0; 
                              *p = p1; 
                          } 
                          else 
                          {
                              p2 = (*p1).Right; 
                              (*p1).Right = (*p2).Left; 
                              (*p2).Left = p1; 
                              (**p).Left = (*p2).Right; 
                              (*p2).Right = *p;
                              if ((*p2).bal == -1) 
                                  (**p).bal = 1; 
                              else 
                                  (**p).bal = 0; 
                              if ((*p2).bal == 1) 
                                  (*p1).bal = -1; 
                              else 
                                  (*p1).bal = 0;
                              *p = p2;
                          } 
                          (**p).bal = 0; 
                          h = false; 
                          break; 
            }
    }
    if (x > (**p).Key) 
    {    
        Search (x, &((**p).Right)); 
        if (h == true)
            switch ((**p).bal) 
            { 
                case -1: (**p).bal = 0; h = false; break; 
                case  0: (**p).bal = 1; break;
                case  1:
                          p1 = (**p).Right; 
                          if ((*p1).bal == 1) 
                          {
                              (**p).Right = (*p1).Left; 
                              (*p1).Left = *p; 
                              (**p).bal = 0; 
                              *p = p1; 
                          } 
                          else
                          {
                               p2 = (*p1).Left; 
                               (*p1).Left = (*p2).Right; 
                               (*p2).Right = p1; 
                               (**p).Right = (*p2).Left; 
                               (*p2).Left = *p; 
                               if ((*p2).bal == 1) 
                                   (**p).bal = -1; 
                               else 
                                   (**p).bal = 0; 
                               if ((*p2).bal == -1) 
                                   (*p1).bal = 1; 
                               else 
                                   (*p1).bal = 0; 
                               *p = p2; 
                          } 
                          (**p).bal = 0; 
                          h = false; 
                          break;
             }
    }
}
 
void TREE::Print (node **w, int lvl)
//ÈçîáðГ*æåГ*ГЁГҐ äåðåâГ* w Г*Г* ГЅГЄГ°Г*Г*ГҐ äèñïëåÿ
//         (ðåêóðñèâГ*ûé Г*ëãîðèòì).
//*w - ГіГЄГ*Г§Г*òåëü Г*Г* êîðåГ*Гј äåðåâГ*.
{
    if  (*w != NULL)
    {
        Print (&((**w).Right), lvl + 1);
        for (int i = 0; i < lvl; i++) 
            cout<< "   ";
        cout<< (**w).Key<< endl;
        Print (&((**w).Left), lvl + 1);
    }
}
 
void TREE::Traversal (node **w)
//*w - ГіГЄГ*Г§Г*òåëü Г*Г* êîðåГ*Гј äåðåâГ*.
{
    ofstream o("bin.txt");
    if  (*w != NULL)
    {
        Traversal (&((**w).Right));
        o<< (**w).Key<< " ";
        Traversal (&((**w).Left));              
    }
    o.close();
}
Добавлено через 16 часов 49 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
Необходимо обойти бинарное дерево и сохранить последовательность прохождения вершин в файл. У меня записывает только корень дерева.
ап...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru