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

Обход дерева - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевернуть число http://www.cyberforum.ru/cpp-beginners/thread564718.html
Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран. Примечание: Например, пользователь ввел число 12345. На экране должно появиться число наоборот - 54321. #include <iostream> using namespace std; int main () {
C++ Координаты точек Представить координаты точек в трехмерном пространстве в виде структуры, состоящей из трех вещественных полей. Написать программу ввода координат двух точек и вычисления расстояния между ними. http://www.cyberforum.ru/cpp-beginners/thread564715.html
C++ 20 наиболее часто встречающихся слов
дан файл. выписать 20 наиболее часто встречающихся слов в алфавитном порядке. (структуры использовать нельзя). помогите пожалуйста. заранее спасибо
C++ Считывание из файла
Дан файл с данными типа: Петров Роман 1989 04 15 5 4 3 5 естесственно, что данных больше.. Последние 4 цифры - это оценки.. Надо вывести на экран данные студентов, успевающих на 4 и 5.. ваще не понятненько, как считывать по строкам из файла, как сравнивать((
C++ Двумерный массив, поделить 4-мя указателями http://www.cyberforum.ru/cpp-beginners/thread564669.html
Дан массив A и 4 указателя - А1, А2, А3, А4. Мне надо их присвоить так, чтобы на элементы массива А указывал A1, на А - A2, на А - A3, на А - A4. Проблема именно в том, как правильно адресовать А2 и А4, А1 и А3 сделал сам. Подскажите пожалуйста.
C++ дана матрица размером 5 на 5, содержащая вещественные числа, значения которых вводятся с клавиатуры. дана матрица размером 5 на 5, содержащая вещественные числа, значения которых вводятся с клавиатуры. необходимо по этой матрице А сформулировать матрицу В v v v ... подробнее

Показать сообщение отдельно
softonet
 Аватар для softonet
32 / 32 / 2
Регистрация: 17.04.2011
Сообщений: 201
03.05.2012, 18:21     Обход дерева
Существует 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
74
В силу рекурсивности струтктуры двоичного дерева, реализация алгоритма обхода очень проста.
 
Прямой
 
 
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);
}
 
Текущее время: 09:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru