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

Деревья на с++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упорядочивание матрицы http://www.cyberforum.ru/cpp-beginners/thread564073.html
Дана матрица вещественных величин D, состоящая из 9 строк и 7 столбцов. Требуется упорядочить матрицу по возрастанию элементов четвертого столбца. Для проверки предусмотреть вывод на экран начальной матрицы и вывод матрицы после изменения.
C++ 2 способа сортировки Задайте любым способом массив-вектор длиной 30 из целых чисел. Решите задачу сортировки имеющегося массива вначале одним способом, затем другим способом (например, метод перебора- I способ, при помощи алгоритма попарного сравнения соседних элементов - II способ) http://www.cyberforum.ru/cpp-beginners/thread564072.html
C++ Рекурсия: вычисление НОД
Даны натуральные числа n,m; найти НОД(n,m). Использовать программу, включающую рекурсивную процедуру вычисления НОД, основанную на соотношении НОД(n,m)=НОД(m,r), где r – остаток от деления n на m.
C++ Стек на основе односвязного списка
Здравствуйте! Дали задание - "реализовать программу работы со стеком на основе односвязного списка реализованный через массив или вектор." Что-то я совсем не понимаю , что к чему. Дайте пожалуйста толчок, как это стек на основе односвяз. списка через массив ?
C++ Декартово произведение графов http://www.cyberforum.ru/cpp-beginners/thread564044.html
Ребят, всем привет! Молю о помощи. Нужно написать программу для нахождение декартова произведение неориентированных графов, структура данных - список смежности. Горит зачёт. Помогите пожалуйста кодом как кто сможет)
C++ Помощь с алгоритмом Нужно решить задачу о рюкзаке с возможностью брать любой из n предметов неограниченное количество раз. Нашел работающий алгоритм. Но он выдает только стоимость, а мне нужно чтобы он выдал еще и набор. Помогите пожалуйста. Вот алгоритм, который нашел #include <vector> #include <limits> //wts - массив весов, cost - массив стоимостей предметов, W - вместимость рюкзака //функция возвращает... подробнее

Показать сообщение отдельно
softonet
32 / 32 / 2
Регистрация: 17.04.2011
Сообщений: 201
03.05.2012, 15:31     Деревья на с++
Существует 3 вида обхода дерева: прямой, обратный и концевой.

1) Прямой обход дерева
- попасть в корень
- пройти левое поддерево
- пройти правое поддерево

2) Обратный обход дерева
- пройти левое поддерево
- попасть в корень
- пройти правое поддерево

3) Концевой обход дерева
- пройти левое поддерево
- пройти правое поддерево
- попасть в корень
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
В силу рекурсивности струтктуры двоичного дерева, реализация алгоритма обхода очень проста.
 
Прямой
 
struct Node{
char *info; // информация, располагаемая в узле дерева
Node *left; // указатель на левое поддерево
Node *right; // указатель на правое поддерево
};
int cnt; // порядковый номер узла дерева в процессе обхода
 
 
void straight(Node *root)
{
if(!root)
return;
/* здесь выполняется необходимая обработка корня – например, вывод информации в выходной поток */
printf("%d. \"%s\"\n", ++cnt, root->info);
/* обход левого поддерева */
straight(root->left);
/* обход правого поддерева */
straight(root->right);
}
 
 
Обратный
 
struct Node{
char *info; /* информация, располагаемая в узле дерева */
Node *left; /* указатель на левое поддерево */
Node *right; /* указатель на правое поддерево */
};
int cnt;
 
void reverse(Node *root)
{
/* если дерево пусто, не выполнять никаких действий – обход дерева завершается
*/
if(!root)
return;
/* обход левого поддерева */
reverse(root->left);
/* здесь выполняется необходимая обработка корня – например,
вывод информации в выходной поток */
printf("%d. \"%s\"\n", ++cnt, root->info);
/* обход правого поддерева */
reverse(root->right);
}
 
 
Концевой
 
struct Node{
char *info; /* информация, располагаемая в узле дерева */
Node *left; /* указатель на левое поддерево */
Node *right; /* указатель на правое поддерево */
};
int cnt;
 
void tail(Node *root)
{
/* если дерево пусто, не выполнять никаких действий – обход дерева завершается
*/
if(!root)
return;
/* обход левого поддерева */
tail(root->left);
/* обход правого поддерева */
tail(root->right);
/* здесь выполняется необходимая обработка корня – например,
вывод информации в выходной поток */
printf("%d. \"%s\"\n", ++cnt, root->info);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru