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

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

14.06.2018, 20:45. Показов 17829. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru