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

Работа с деревьями (Найти все поддеревья, листья которых находятся в заданном диапазоне высот от корня поддерева) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа на Си.Как корректно записать результат в текстовый файл http://www.cyberforum.ru/cpp-beginners/thread815003.html
Не получается красиво записать результат в текстовый файлик. Желательно записать в файл вот так : Summa elementov 1 stolbca = ? Summa elementov 2 stolbca = ? Summa elementov 3 stolbca = ? ну и так далее...в зависимости от количества столбцов. Пробовал через ofstream,вставляя в void OutResult().Ничего не получилось... ofstream out; out.open("rezultatmatrix.txt",ios::app);
C++ Задача на указатели (Рассчитать в одной функции сумму и произведение значений элементов произвольной строки двухмерного массива) Ввести двумерный массив размерностью 5х6. Рассчитать в одной функции сумму и произведение значений элементов произвольной строки двухмерного массива. Написать функцию умножения элементов произвольного столбца на заданное число. Ввод массива и исходных данных выполнить в функции ввода, вывод массива и результатов – в функции вывода. Помогите, пожалуйста, а то всякая чушь выходит... Насколько... http://www.cyberforum.ru/cpp-beginners/thread815000.html
Ввод данных в переменную C++
У меня есть int переменная, и мне нужно ввести в нее одно число, а конкретнее нужно нажать один раз на клавиатуре и чтобы это число записалось в эту переменную.
C++ Файлы. Найти слово, встречающееся в каждом предложении
Уже сломал голову с ней, решил кучу других задач. Но эта... вынос мозга.:wall: :wall: :wall: Попытки запихнуть в векторы , массивы - крах. Каждое слово цепляет знак пунктуации и не воспринимается для сравнения. SOS SOS SOS SOS SOS!!!!!!!!!!!!! Дан файл, содержащий текст на русском языке. Найти слово, встречающееся в каждом предложении, или сообщить, что такого слова нет.
C++ Запись полей класса (в том числе структур) в xml файл http://www.cyberforum.ru/cpp-beginners/thread814981.html
Здравствуйте! Программирую недавно, и вот возникла задача записи данных о классе в xml-файл Что для этого используется? Есть ли какие-то ограничения? Класс содержит обычные переменные, структуры, возможно динамические массивы
C++ Программа моделирующая бросание монеты Написал программу моделирующая 100 бросаний монеты. Все работает, но почему-то все 100 раз выпадает только орел или только Решка. Как сделать, чтобы все броски не были с одним исходом ? #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int flip(); int main() { setlocale(0,""); char* Status; подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,696
24.03.2013, 07:22     Работа с деревьями (Найти все поддеревья, листья которых находятся в заданном диапазоне высот от корня поддерева)
Цитата Сообщение от wtfdotka Посмотреть сообщение
листья которых находятся в заданном диапазоне высот от корня поддерева.
Вообще-то расстояние от корня дерева называется уровнем.
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
/////////////////////////////////////////////////////////////////////////////////////////
//Дано N-дерево. Найти все поддеревья, листья которых находятся в заданном диапазоне уровней от корня поддерева.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <complex>
#include <functional>
#include <iostream>
#include <set>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
class   T_node;
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<T_node*>    T_children_pointers;
typedef std::set<int>           T_node_heights_set;
typedef std::complex<int>       T_levels_segment;
/////////////////////////////////////////////////////////////////////////////////////////
class  T_node
{
    //-----------------------------------------------------------------------------------
    int                     node_ID_;
 
    T_node_heights_set      node_heights_set_;
    T_children_pointers     children_pointers_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_node(int  node_ID)
        :
        node_ID_(node_ID)
    {}
    //-----------------------------------------------------------------------------------
    bool  to_node_with_ID_add_child_with_ID
        (
            int     node_ID,
            int     child_ID
        )
    {
        bool    bool_res    =   false;
        if(node_ID_ == node_ID)
        {
            children_pointers_.push_back
                (
                    new     T_node(child_ID)
                );
 
            bool_res    =   true;
        }
        else
        {
            for (
                    T_children_pointers::iterator     child_pointer_it  =   children_pointers_.begin    ();
                    child_pointer_it                                    !=  children_pointers_.end      ();
                    ++child_pointer_it
                )
            {
                bool_res    =   (*child_pointer_it)->to_node_with_ID_add_child_with_ID
                                    (
                                        node_ID,
                                        child_ID
                                    );
 
                if( bool_res )
                {
                    break;
                }
            }
        }//else
        return  bool_res;
    }
    //-----------------------------------------------------------------------------------
    void  calc_min_and_max_leaf_levels_and_print_if_they_belongs_to_segment
        (
            int  min_allowable_max_leaf_level,
            int  max_allowable_max_leaf_level
        )
    {
        if  (
                !children_pointers_.empty()
            )
        {
            for (
                    T_children_pointers::const_iterator     child_pointer_it    =   children_pointers_.begin    ();
                    child_pointer_it                                            !=  children_pointers_.end      ();
                    ++child_pointer_it
                )
            {
                (*child_pointer_it)->calc_min_and_max_leaf_levels_and_print_if_they_belongs_to_segment
                    (
                        min_allowable_max_leaf_level,
                        max_allowable_max_leaf_level
                    );
 
                node_heights_set_.insert
                    (
                        (*child_pointer_it)->min_leaf_level() + 1
                    );
 
                node_heights_set_.insert
                    (
                        (*child_pointer_it)->max_leaf_level() + 1
                    );
            }//for
        }//if
 
        if  (
                    min_allowable_max_leaf_level    <=  min_leaf_level()
                &&  max_leaf_level()                <=  max_allowable_max_leaf_level
            )
        {
            std::cout   <<  "node_ID = "
                        <<  node_ID_
                        <<  '\t'
                        <<  T_levels_segment
                                (
                                    min_leaf_level(),
                                    max_leaf_level()
                                )
 
                        <<  std::endl;
        }//if
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    int  min_leaf_level()
    {
        return  node_heights_set_.empty()
                    ?   0
                    :   *node_heights_set_.begin();
    }
    //-----------------------------------------------------------------------------------
    int  max_leaf_level()
    {
        return  node_heights_set_.empty()
                    ?   0
                    :   *node_heights_set_.rbegin();
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_node*     tree    =   new     T_node(0);
    tree->to_node_with_ID_add_child_with_ID(0, 1);
    tree->to_node_with_ID_add_child_with_ID(0, 2);
    tree->to_node_with_ID_add_child_with_ID(0, 3);
 
    tree->to_node_with_ID_add_child_with_ID(1, 5);
    tree->to_node_with_ID_add_child_with_ID(1, 6);
 
    tree->to_node_with_ID_add_child_with_ID(2, 4);
 
    tree->to_node_with_ID_add_child_with_ID(3, 11);
 
    tree->to_node_with_ID_add_child_with_ID(4, 8);
    tree->to_node_with_ID_add_child_with_ID(4, 9);
 
    tree->to_node_with_ID_add_child_with_ID(6, 7);
 
    tree->to_node_with_ID_add_child_with_ID(9, 10);
 
    tree->to_node_with_ID_add_child_with_ID(11, 12);
 
    tree->to_node_with_ID_add_child_with_ID(12, 13);
    tree->to_node_with_ID_add_child_with_ID(12, 14);
 
    tree->to_node_with_ID_add_child_with_ID(14, 15);
 
    for(;;)
    {
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  "Введите желаемый диапазон уровней узлов поддерева от корня поддерева:"
                    <<  std::endl
                    <<  "min = ";
 
        int     min     =   0;
        std::cin    >>  min;
 
        std::cout   <<  "max = ";
        int     max     =   0;
        std::cin    >>  max;
 
        std::cout   <<  "Корни поддеревьев, листья которых находятся в этом диапазоне уровней от корня поддерева:"
                    <<  std::endl;
 
        tree->calc_min_and_max_leaf_levels_and_print_if_they_belongs_to_segment
            (
                min,
                max
            );
    }
}
 
Текущее время: 13:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru