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

Вывод бинарного дерева

20.11.2019, 17:56. Показов 6061. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, как вывести бинарное дерево в виде дерева?
Само дерево и обход у меня есть, а как его вывести красиво, не знаю
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
#include <iostream>
using namespace std;
 
struct Node
{
    int x;
    Node* l, * r;
};
 
void show(Node*& Tree)
{
    if (Tree != NULL)
    {       
        show(Tree->l);
        show(Tree->r);
        cout << Tree->x << '\t';
    }
}
 
void del(Node*& Tree) 
{
    if (Tree != NULL)
    {
        del(Tree->l);
        del(Tree->r);
        delete Tree;
        Tree = NULL;
    }
 
}
 
void add_node(int x, Node*& MyTree)
{
    if (NULL == MyTree)
    {
        MyTree = new Node;
        MyTree->x = x;
        MyTree->l = MyTree->r = NULL;
    }
 
    if (x < MyTree->x)
    {
        if (MyTree->l != NULL) add_node(x, MyTree->l);
        else
        {
            MyTree->l = new Node;
            MyTree->l->l = MyTree->l->r = NULL;
            MyTree->l->x = x;
        }
    }
 
    if (x > MyTree->x)
    {
        if (MyTree->r != NULL) add_node(x, MyTree->r);
        else
        {
            MyTree->r = new Node;
            MyTree->r->l = MyTree->r->r = NULL;
            MyTree->r->x = x;
        }
    }
}
 
int main()
{
    int x;
    Node* Tree = NULL;
    for (int i = 0; i < 7; i++)
    {
        cout << "x= "; cin >> x;
        add_node(x, Tree);
    }     
    show(Tree);
    cout << '\n';
    del(Tree);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2019, 17:56
Ответы с готовыми решениями:

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

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

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

14
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 18:01
Цитата Сообщение от Лена Есеева Посмотреть сообщение
Помогите пожалуйста, как вывести бинарное дерево в виде дерева?
Что-то типа
C++
1
2
3
4
5
6
7
8
9
void show_tree(const Node *Tree, size_t tabs = 0)
{
    if (Tree != NULL)
    {
        cout << std::string(tabs, '\t') << Tree->x << std::endl;
        show(Tree->l, tabs + 1);
        show(Tree->r, tabs + 1);
    }
}
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 18:13  [ТС]
oleg-m1973,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
show(Tree->l, tabs + 1);
        show(Tree->r, tabs + 1);
подчеркивает Tree и tabs и ошибку выдает: отброшены квалификаторы в ссылке, привязывающей тип "Node *&" к инициализатору типа "Node *const" и еще одна ошибка: слишком много аргументов в вызове функции
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 18:15
Цитата Сообщение от Лена Есеева Посмотреть сообщение
подчеркивает Tree и tabs и ошибку выдает: отброшены квалификаторы в ссылке, привязывающей тип "Node *&" к инициализатору типа "Node *const"
и еще: слишком много аргументов в вызове функции
C++
1
2
        show_tree(Tree->l, tabs + 1);
        show_tree(Tree->r, tabs + 1);
1
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 18:18  [ТС]
oleg-m1973, спасибо) а как теперь вызвать эту функцию в главной?
C++
1
show_tree(Tree);
?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 18:19
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, спасибо) а как теперь вызвать эту функцию в главной?
Да, так
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 18:22  [ТС]
oleg-m1973, тогда появляется ошибка: слишком мало аргументов в вызове функции(
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 18:23
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, тогда появляется ошибка: слишком мало аргументов в вызове функции(
show_tree(Tree, 0);
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 19:10  [ТС]
oleg-m1973, это получается дерево просто вертикально выводится, а можно как-то вроде этого?
C++
1
2
3
4
          6
      4      9
   2      7     10
      3
Добавлено через 23 минуты
помогите пожалуйста кто-нибудь, мне к завтрашнему дню надо, я весь интернет перерыла
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 20:59
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, это получается дерево просто вертикально выводится, а можно как-то вроде этого?
Это так просто не сделаешь, да и никому особо не нужно (поэтому и не нашла). Деревья, они обычно вертикально и выводятся.
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:24  [ТС]
я нашла такой код, только он выводит "лежачее дерево", может можно его переделать переделать во что-то наподобие
C++
1
2
3
4
          6
      4      9
   2      7     10
      3
?

Добавлено через 6 минут
сам код то я не вставила, вот он
C++
1
2
3
4
5
6
7
8
9
10
void print_Tree(Node*& p, int level)
{
    if (p != NULL)
    {
        print_Tree(p->l, level + 1);
        for (int i = 0; i < level; i++) cout << "   ";
        cout << p->x << endl;
        print_Tree(p->r, level + 1);
    }
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 21:26
Цитата Сообщение от Лена Есеева Посмотреть сообщение
я нашла такой код, только он выводит "лежачее дерево", может можно его переделать переделать во что-то наподобие
Здесь нужно подсчитать максимальную глубину дерева, по ней можно подсчитать максимальную ширину строки. Потом вывести дерево по уровням (попробуй для начала сделать такой обход, нифига не тривиально), центрируя элементы исходя из этой ширины и количества элементов на уровне.
Совершенно неблагодарная задача для текстового режима. Оно тебе нужно?

Добавлено через 33 секунды
Цитата Сообщение от Лена Есеева Посмотреть сообщение
сам код то я не вставила, вот он
Он работает?
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:28  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Совершенно неблагодарная задача для текстового режима. Оно тебе нужно?
а фиг его знает, может и не нужно, препод толком задание не объяснил, а сдавать лабу завтра
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2019, 21:39
Цитата Сообщение от Лена Есеева Посмотреть сообщение
а фиг его знает, может и не нужно, препод толком задание не объяснил, а сдавать лабу завтра
Для лабораторной - точно не нужно. Сделай как я показал, только замени там табуляции, '\t', на пробелы - cout << std::string(tabs * 2, ' ') << , чтоб покрасивее было. Думаю, этого будет больше, чем достаточно.
1
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:46  [ТС]
oleg-m1973, спасибо вам большое))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2019, 21:46
Помогаю со студенческими работами здесь

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

Вывод бинарного дерева в консоль
Доброго времени суток! Прошу помощи в выводе бинарного дерева на экран (в консоль). Есть шаблон: ...

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

Вывод бинарного дерева на экран в виде "дерева"
основная задача: подсчет количества листьев. проблема: при просмотре хочу выводить бин. дерево, в красивом виде, возможно использование...

Вывод левой ветки бинарного дерева
Здравствуйте, уважаемые форумчане! Вывел левую ветку бинарного дерева на экран, но хотел посоветоваться с более опытными программистами....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru