Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
1

Создать дерево указателями и вывести примерное его изображение в консоль

13.02.2015, 14:33. Показов 928. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно создать дерево указателями и вывести примерное его изображение через консоль.
Есть код, который делали мы с учителем в универе, не знаю работает ли он, но мне там не понятен алгоритм работы, поэтому и попытаться что то поправить не могу.
Код:
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
91
92
93
94
95
96
#include <stdio.h>
#include <iostream>
using namespace std;
 
struct node
{
    int data;
    node *son;
    node *brother;
};
 
node *leftbrother;
node *current;
node *root;
 
void add_root()
{
    cout << "Koren: ";
    current = new node;
    cin >> current->data;
    current->brother = NULL;
    current->son = NULL;
    root = current;
    leftbrother = current;
}
 
void add_children()
{
    int count;
    cout << "Enter count: ";
    cin >> count;
    if (count > 0)
    {
        for (int i = 0;i < count; i++)
        {
            cout << "Enter " << i+1 << " brother: ";
            node *newNode = new node;
            newNode->brother = NULL;
            newNode->son = NULL;
            cin >> newNode->data;
 
            if (i==0)
            {
                if (root->son == NULL)
                {
                    root->son = newNode;
                    current = newNode;
                    leftbrother = newNode;
                }
                else
                {
                    current->son = newNode;
                    current = newNode;
                    leftbrother = current;
                }
            }
            else
            {
                current->brother = newNode;
                current = newNode;
            }
        }
        add_children();
    }
}
 
 
void navigation()
{
 
    node *first = root->son;
    cout << root->data << endl;
    for (node *curr = root; curr; curr->son)
    {
        int i = 0;
        for (node *curr2 = curr->son; curr2; curr2->brother)
        {
            cout << curr2->data << "-";
 
 
            curr2 = curr2->brother;
            if (i == 0)
                curr = curr2;
            i++;
        }
        // тут почему то ещё много раз цикл проходит бестолку
    }
}
 
void main()
{
    add_root();
    add_children();
    navigation();
    system("pause");
}
Я даже не знаю, ошибка в выводе или создаётся неправильно.


Если я правильно понял, то дерево создаётся такое, как в прикрепленном изображении.

Помогите сделать програмку рабочей
Миниатюры
Создать дерево указателями и вывести примерное его изображение в консоль  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2015, 14:33
Ответы с готовыми решениями:

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

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

Создать класс с парой переменных, записать его в массив и вывести в консоль
Нужно создать класс с парой переменных и и записать его в массив а потом вывести на консоль....

Как создать 2-ое дерево со значениями 1-го? Не могу разобраться с указателями
Вот код(недоработанный): #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using...

1
Мишка Косолапый :)
284 / 254 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
13.02.2015, 16:25  [ТС] 2
Указатель leftbrother я не вижу, что где то используется. И на 71 строке указатель создается и тоже нигде не используется, с моим кодом определенно что то не так

Добавлено через 54 минуты
Немного разбираюсь через отладку пошагово
Структура формируется с разрывом. То есть если задаю так:
1
1-2-3
1-2-3-4-5

То структура получиться вида:
1
1-3
1-5

Адрес с первого элемента ведет сразу на последний, а должен последовательно дойти до последнего.

Код:
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
void add_children()
{
    int count;
    cout << "Enter count: ";
    cin >> count;
    if (count > 0)
    {
        for (int i = 0;i < count; i++)
        {
            cout << "Enter " << i+1 << " brother: ";
            node *newNode = new node;
            newNode->brother = NULL;
            newNode->son = NULL;
            cin >> newNode->data;
            current = uson;
            if (i==0)
            {
                if (root->son == NULL)
                {
                    root->son = newNode;
                    current = newNode;
                    uson = newNode;
                }
                else
                {
                    current->son = newNode;
                    current = newNode;
                    uson = current;
                }
            }
            else
            {
                current->brother = newNode;
                current = newNode;
            }
        }
        add_children();
    }
}
0
13.02.2015, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2015, 16:25
Помогаю со студенческими работами здесь

Вывести дерево в консоль
Помогите плиз дерево консольно вывести: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Вывести изображение на консоль
Нужно написать код C++ с использованием цикла for и printf,чтобы на консоли вывелось изображение...

Вывести на консоль изображение государственного флага Швейцарии
На одном сайте не могу выполнить домашнее задание ;( Помогите пожалуйста Одна тема -...

Вывести в консоль символ по его коду
Здравствуйте,уже как полтора года не открывал delhi 7 и всё позабыл.Что бы по быстрому вспомнить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru