Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337

Вывод левой ветки бинарного дерева

27.06.2019, 14:25. Показов 2262. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Вывел левую ветку бинарного дерева на экран, но хотел посоветоваться с более опытными программистами. Можно ли это сделать как-то проще/по-другому (например, с помощью обхода). Буду очень рад вашим ответам.

Код программы:

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
Вывести левую ветку бинарного дерева.
*/
 
#include <iostream> 
 
    using namespace std;
     
struct BTree {
    int data;
    BTree* left;
    BTree* right;
};
     
BTree* add(int data) {
  BTree* node = new BTree; 
  node->data = data; 
  node->left = NULL; 
  node->right = NULL; 
  return node;
}
 
bool isLeaf(BTree* node) {
    if ((node->left == NULL) && (node->right == NULL)) {
        return true;
    }
    return false;
}
 
void getLeftBranch(BTree* node) { //Функция вывода левой ветки дерева
    if (node == NULL)
        return;
    cout << node->data << " ";
    while (1) {
        while (node->left) {
            node = node->left;
            cout << node->data << " ";
        }
        if (isLeaf(node)) {
            break;
        }
        while (node->right) {
            node = node->right;
            cout << node->data << " ";
            if (node->left) {
                break;
            }
        }
        if (isLeaf(node)) {
            break;
        }
    }
}
    
int main() {     
    BTree* root = add(10); //Добавляем элемент в корень дерева
    root->left = add(11); 
    root->left->left = add(7);
    root->left->left->right = add(17);
    root->left->left->right->right = add(18);
    root->left->left->right->left = add(2);
    root->left->left->right->left->left = add(0);
    root->left->left->right->left->left->right = add(1);
    root->left->left->right->left->right = add(3);
    root->right = add(9); 
    root->right->left = add(15); 
    root->right->right = add(8);
     
    //Изображение построенного дерева
    /*
         10
        /  \         
       11   9
      /    / \
     7   15   8
      \
       17
       / \
      2  18
     / \
    0   3
     \
      1
    */
    
    cout << "Output of the program:\n";
    getLeftBranch(root);
    cin.get();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2019, 14:25
Ответы с готовыми решениями:

Функция удаления листа (или ветки) бинарного дерева
Здравствуйте программисты! Учусь на первом курсе. Возникли проблемы с разработкой функции удаления ветки листа или корня из дерева. Т.е....

Нужно вывести на экран содержимое самой длинной ветки бинарного дерева
Нужно вывести на экран содержимое самой длинной ветки бинарного дерева на c++

Вывод бинарного дерева
Помогите, пожалуйста, с программой. Нужно вывести бинарное дерево так, как выводится дерево каталогов. Пример: 11 |---5 | |---2 ...

2
Заблокирован
27.06.2019, 14:36
если только левый край
C++
1
2
for(BTree* L=node->left; L; L=L->left)  
  cout << L->data << " ";
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
27.06.2019, 15:43  [ТС]
Pvt, спасибо, я уже написал более короткий рекурсивный вариант. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
void getLeftBranch(BTree* node) { //Функция вывода левой ветки дерева
    if (node == NULL)
        return;
    cout << node->data << " ";
    getLeftBranch(node->left); 
    if (node->left) {
        return;
    } else {
       getLeftBranch(node->right);
    } 
}
Добавлено через 2 минуты
Pvt, вы забыли, что ветка еще может уйти вправо.

Добавлено через 5 минут
В итоге получилось две версии: итеративная и рекурсивная. Тем кто разбирает этот код, наверное, лучше обратить внимание на рекурсивную, так как деревья обычно обходят с помощью рекурсии. Аналогично, можно вывести правую ветку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2019, 15:43
Помогаю со студенческими работами здесь

вывод бинарного дерева
Не могу понять в чем ошибка , функции описаны верно но на выводе хаотичные данные При вводе массива (13 17 5 9 1) я получаю 5 17 3 1 9 ...

Вывод бинарного дерева
Как организовать вывод бинарного дерева?

Вывод бинарного дерева
Помогите пожалуйста, как вывести бинарное дерево в виде дерева? Само дерево и обход у меня есть, а как его вывести красиво, не знаю ...

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

Вывод на консоль бинарного дерева
как сделать вывод на консоль бинарного дерева? struct Node { int d; Node* left; Node* right; }; #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru