Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/88: Рейтинг темы: голосов - 88, средняя оценка - 4.73
0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116

Реализация обхода в ширину и глубину бинарного дерева

14.06.2018, 20:45. Показов 17910. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как реализовать обход дерева (глубины три, т.е. трех уровневое) в глубину и ширину и что под этим подразумевается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2018, 20:45
Ответы с готовыми решениями:

Разобраться с рекурсивной функцией обхода бинарного дерева
Люди, помогите разобраться с рекурсивной функцией обхода бинарного дерева. Бьюсь головой об стену, не могу понять как она работает. ...

Пронумеровать вершины бинарного дерева в соответствии с порядком концевого обхода
Здравствуйте!!!! Помогите пожалуйста решить задачу. Построить бинарное дерево поиска для заданного множества целых чисел и занумеровать...

Реализация бинарного дерева
Доброго времени суток, уважаемые форумчане. Возник вопрос по реализации бинарного дерева на С++, а именно с методом удаления элемента в...

7
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
14.06.2018, 21:02
Можно же всё найти, если поискать: https://medium.com/@dimko1/%D0... 54848c2d47
Скорее всего на форуме в блогах тоже есть подобная инфа и реализации.
0
0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
14.06.2018, 21:06  [ТС]
SuperKir, та я читал но там на графах и используют контейнеры
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
14.06.2018, 21:17
nenahov, А что есть дерево по-твоему?
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
15.06.2018, 10:58
Но разница-то есть. Так что претензия обоснована
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
16.06.2018, 20:03
Ромаха, и какая же?)
0
354 / 135 / 28
Регистрация: 16.12.2012
Сообщений: 607
Записей в блоге: 1
16.06.2018, 22:43
Например, dfs

для графа
C++
1
2
3
4
5
6
void dfs(int v) {
   if(used[v]) return;
   used[v] = true;
   for(int i = 0; i < g[v].size(); i++) 
       dfs(g[v][i]);
}
для дерева
C++
1
2
3
4
void dfs(int v, int from) {
    for(int i = 0; i < g[v].size(); i++) 
        if(g[v][i] != from) dfs(g[v][i], v);
}
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
03.10.2018, 20:06
nenahov, здравствуйте! Я сейчас довольно активно изучаю бинарные деревья. В посте #2 вам дали правильную ссылку, однако можно найти гораздо больше материала с помощью англоязычного поиска. Действительно, существует два обхода - в ширину и глубину. Обход в глубину разбивается на три вида: preorder traversal, inorder traversal и postorder traversal. Эти три обхода (а именно, вывод узлов уже построенного дерева) в коде лишь различаются расположением функции printf() или cout (обычно это происходит рекурсивно), однако имеют очень большое практическое применение. В частности, с помощью inorder traversal можно вывести узлы в отсортированном порядке, а если добавить множество, то перевести, к примеру, обычное бинарное дерево в бинарное дерево поиска (не нарушая структуру). Более того, данные три вида обходов применяются при выводе нотаций (префиксная, инфиксная и постфиксная). Так, построив бинарное дерево выражений (binary expression tree) можно постфиксную запись, без особого труда, перевести в инфиксную или префиксную (будет меняться лишь тип обхода при выводе). Я рекомендую вам поискать в англоязычном поиске задачи, а именно, посмотреть binary search tree (BST) и binary expression tree и вы найдете целое множество примеров на использование деревьев. Я со своей стороны даю вам ссылку на код, который недавно реализовал с помощью очереди - это обход бинарного дерева в ширину: Задача на интересное применение очереди (обход дерева в ширину) Что касается обхода в глубину (их три), советую вам разобрать их на примере бинарного дерева поиска - это, кстати, очень классная тренировка на понимание рекурсии.

P.S. Я мог бы рассказать вам гораздо больше, если вы действительно заинтересованы в данной тематике.

Добавлено через 9 минут
Кстати, недавно сдавал задачу на сервере на тему "бинарное дерево поиска". Немного изменив структуру программы, удалось вывести частоты появления элементов для заданной последовательности. Это еще одно доказательство того, что данная структура данных помогает найти довольно быстрое и интересное решение для насущной проблемы Вот код:

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
#include <bits/stdc++.h> 
 
    using namespace std;
    
struct node { 
    int data;
    int count;
    node *left;
    node *right;
};
    
node* newNode(int data) {
  node* element = new node; 
  element->data = data;
  element->count = 1;
  element->left = NULL; 
  element->right = NULL; 
  return element;
}
 
node* insert(node* element, int key) { 
    if (element == NULL) 
        return newNode(key);
    if (key < element->data)
        element->left = insert(element->left, key);
    else if (key > element->data)
        element->right = insert(element->right, key);
    else {
        element->count++;
    }   
    return element;
}
 
void printOrder(node* element) { 
    if (element == NULL)
        return;
    printOrder(element->left);
    cout << element->data << " " << element->count << "\n"; //Inorder traversal
    printOrder(element->right);
}
 
int main() {
    int n, k = 0;
    node* root = NULL;
    do {
        k++;
        cin >> n;
        if (n == 0) break;
        if (k == 1) root = insert(root, n); 
        else insert(root, n);
  } while (n);
  printOrder(root);
  system("pause");
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.10.2018, 20:06
Помогаю со студенческими работами здесь

Реализация бинарного дерева
написать программу, реализующую бинарное дерево. Предусмотреть процедуры и функции: инициализация дерева, вставка элемента (вершины),...

Реализация бинарного дерева поиска
Не выводит значения узлов деревьев, как я понял происходит утечка памяти, но я не пойму, что нужно сделать. Программа ошибку не выдаёт....

Реализация и вывод бинарного дерева
Помогите создать бинарное дерево и вывести его на экран по уровням. Заранее спасибо.

Реализация бинарного дерева классом
Добрый вечер. Написал класс class TreeClass { int number; TreeClass *left, *right; public: void AddNode(int, TreeClass); ...

Реализация бинарного дерева поиска
Задача: Реализация бинарного дерева поиска Компилируется нормально, а при запуске выбивает ошибку : &quot;Необработанное исключение по...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru