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

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

20.11.2019, 17:56. Просмотров 515. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2019, 17:56
Ответы с готовыми решениями:

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

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

вывод бинарного дерева
Не могу понять в чем ошибка , функции описаны верно но на выводе хаотичные данные При вводе...

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

14
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 18:01 2
Цитата Сообщение от Лена Есеева Посмотреть сообщение
Помогите пожалуйста, как вывести бинарное дерево в виде дерева?
Что-то типа
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  [ТС] 3
oleg-m1973,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
show(Tree->l, tabs + 1);
        show(Tree->r, tabs + 1);
подчеркивает Tree и tabs и ошибку выдает: отброшены квалификаторы в ссылке, привязывающей тип "Node *&" к инициализатору типа "Node *const" и еще одна ошибка: слишком много аргументов в вызове функции
0
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 18:15 4
Цитата Сообщение от Лена Есеева Посмотреть сообщение
подчеркивает 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  [ТС] 5
oleg-m1973, спасибо) а как теперь вызвать эту функцию в главной?
C++
1
show_tree(Tree);
?
0
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 18:19 6
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, спасибо) а как теперь вызвать эту функцию в главной?
Да, так
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 18:22  [ТС] 7
oleg-m1973, тогда появляется ошибка: слишком мало аргументов в вызове функции(
0
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 18:23 8
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, тогда появляется ошибка: слишком мало аргументов в вызове функции(
show_tree(Tree, 0);
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 19:10  [ТС] 9
oleg-m1973, это получается дерево просто вертикально выводится, а можно как-то вроде этого?
C++
1
2
3
4
          6
      4      9
   2      7     10
      3
Добавлено через 23 минуты
помогите пожалуйста кто-нибудь, мне к завтрашнему дню надо, я весь интернет перерыла
0
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 20:59 10
Цитата Сообщение от Лена Есеева Посмотреть сообщение
oleg-m1973, это получается дерево просто вертикально выводится, а можно как-то вроде этого?
Это так просто не сделаешь, да и никому особо не нужно (поэтому и не нашла). Деревья, они обычно вертикально и выводятся.
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:24  [ТС] 11
я нашла такой код, только он выводит "лежачее дерево", может можно его переделать переделать во что-то наподобие
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
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 21:26 12
Цитата Сообщение от Лена Есеева Посмотреть сообщение
я нашла такой код, только он выводит "лежачее дерево", может можно его переделать переделать во что-то наподобие
Здесь нужно подсчитать максимальную глубину дерева, по ней можно подсчитать максимальную ширину строки. Потом вывести дерево по уровням (попробуй для начала сделать такой обход, нифига не тривиально), центрируя элементы исходя из этой ширины и количества элементов на уровне.
Совершенно неблагодарная задача для текстового режима. Оно тебе нужно?

Добавлено через 33 секунды
Цитата Сообщение от Лена Есеева Посмотреть сообщение
сам код то я не вставила, вот он
Он работает?
0
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:28  [ТС] 13
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Совершенно неблагодарная задача для текстового режима. Оно тебе нужно?
а фиг его знает, может и не нужно, препод толком задание не объяснил, а сдавать лабу завтра
0
6054 / 4046 / 1654
Регистрация: 07.05.2019
Сообщений: 12,549
Записей в блоге: 1
20.11.2019, 21:39 14
Цитата Сообщение от Лена Есеева Посмотреть сообщение
а фиг его знает, может и не нужно, препод толком задание не объяснил, а сдавать лабу завтра
Для лабораторной - точно не нужно. Сделай как я показал, только замени там табуляции, '\t', на пробелы - cout << std::string(tabs * 2, ' ') << , чтоб покрасивее было. Думаю, этого будет больше, чем достаточно.
1
1 / 1 / 0
Регистрация: 21.03.2019
Сообщений: 89
20.11.2019, 21:46  [ТС] 15
oleg-m1973, спасибо вам большое))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2019, 21:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.