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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
hazerot
2 / 2 / 0
Регистрация: 13.05.2012
Сообщений: 46
#1

Алгоритмы обходов дерева - C++

12.07.2012, 19:06. Просмотров 2920. Ответов 3
Метки нет (Все метки)

Всем добрый вечер. Не у кого случаем не завалялись алгоритмы для обходов дерева, если да, то поделитесь пожалуйста.
Нужны обходы:
Прямой или префиксный порядок (сверху вниз)
Обратный или инфиксный порядок (слева направо)
Концевой или постфиксный порядок (снизу вверх)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 19:06     Алгоритмы обходов дерева
Посмотрите здесь:

Запись бинарного дерева в файл и восстановление из него этого дерева C++
C++ алгоритмы сортировки
Алгоритмы сортировок C++
Алгоритмы архивирования C++
C++ Задачка на алгоритмы
C++ Рекурсивные алгоритмы
C++ Вывод бинарного дерева на экран в виде "дерева"
C++ Алгоритмы на C++
C++ Алгоритмы С++
Написать шаблон бинарного дерева с функцией распечатки дерева C++
Алгоритмы C++
Количество обходов шахматной доски конём (с возвратом в начальную клетку) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.07.2012, 21:09     Алгоритмы обходов дерева #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
hazerot, если говорить о рекурсивной реализации, всё довольно просто, фактически, название обхода определяет реализацию.
Префиксный обход:
C++
1
2
3
4
5
6
7
8
9
10
void preorder(TreeNode *node)
{
    if (node != 0)
    {
        std::cout << node->data << std::endl;
        
        preorder(node->left);
        preorder(node->right);
    }
}
Инфиксный обход:
C++
1
2
3
4
5
6
7
8
9
10
11
void inorder(TreeNode *node)
{
    if (node != 0)
    {
        inorder(node->left);
        
        std::cout << node->data << std::endl;
        
        inorder(node->right);
    }
}
Постфиксный обход:
C++
1
2
3
4
5
6
7
8
9
10
void postorder(TreeNode *node)
{
    if (node != 0)
    {
        postorder(node->left);
        postorder(node->right);
        
        std::cout << node->data << std::endl;
    }
}
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
03.01.2013, 01:03     Алгоритмы обходов дерева #3
silent_1991, это ж левоассоциативные обходы?
Цитата Сообщение от silent_1991 Посмотреть сообщение
C
1
2
3
4
5
6
7
8
void preorder(TreeNode *node) 
{ 
if (node != 0) 
{ std::cout << node->data << std::endl;
preorder(node->left); 
preorder(node->right); 
} 
}
Для того чтобы были правоассоциативные нужно поменять 5 и 6 строчку???
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.01.2013, 14:32     Алгоритмы обходов дерева #4
Цитата Сообщение от akk Посмотреть сообщение
Для того чтобы были правоассоциативные нужно поменять 5 и 6 строчку???
Очевидно, да.
Yandex
Объявления
08.01.2013, 14:32     Алгоритмы обходов дерева
Ответ Создать тему
Опции темы

Текущее время: 00:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru