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

Заполнение массива сыновей

19.01.2019, 12:45. Показов 621. Ответов 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
 
void DeleteMatrix(int *matrix, int size)
{
    if (matrix == nullptr || size <= 0)
        return;
    else
        delete[](matrix);
    matrix = nullptr;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int k = 0, size = 0, info = 0, root = 0;
    int *TreeArr = nullptr;
    short int menu = 1;
    while (menu != 0)
    {
        cout << "\n--------------------------------------------------\n";
        cout << " Меню:" << endl;
        cout << "  1 - Ввод дерева;" << endl;
        cout << "  2 - Вывод массива сыновей;" << endl;
        cout << "  3 - Вывод дерева;" << endl;
        cout << "  4 - Определение высоты узла;" << endl;
        cout << "  0 - Выход из программы.";
        cout << "\n--------------------------------------------------\n";
        cout << " Ввод: "; cin >> menu;
        switch (menu)
        {
        case 1:                     //ввод дерева
        {
            DeleteMatrix(TreeArr, size);
            cout << "\n Введите высоту дерева: "; cin >> k;
            size = pow(2, (k + 1)) - 1;
            cout << " Введите корень (начало дерева): "; cin >> root;
            cout << " Размер массива сыновей: " << size << endl << endl;
            cout << endl;
            TreeArr = new int[size];
            TreeArr[0] = root;
            for (int i = 1; i < size; i++)
                TreeArr[i] = -1;
            cout << " Ввод данных (если узел отсутствует, то введите <-1>):" << endl;
            for (int i = 0; i < k; i++)
            {
                cout << "  Введите метку/элемент вершины: ";
                cin >> info;
                for (int j = 0; j < size; j++)
                {
                    if (TreeArr[j] == -1)
                    {
                        j--;
                        break;
                    }
                    else if (TreeArr[j] != -1)
                    {
                        if (info < TreeArr[j])
                        {
                            if (TreeArr[j * 2 + 1] == -1)
                                TreeArr[j * 2 + 1] = info;
                            else
                                j++;
                            break;
                        }
                        else if (info > TreeArr[j])
                        {
                            if (TreeArr[j * 2 + 2] == -1)
                                TreeArr[j * 2 + 2] = info;
                            else
                                j++;
                            break;
                        }
                    }
                }
            }
            cout << "\n Ввод дерева окончен!\n\n";
            for (int i = 0; i < size; i++)
                cout << TreeArr[i] << "  ";
            cout << endl;
            system("pause");
            break;
        }
        case 2:                     //вывод массива сыновей
        {
            if (TreeArr == nullptr)
            {
                cout << "\n Дерево (массив сыновей) пустое(-ой)! Введите дерево!\n";
                break;
            }
            cout << endl << " Массив сыновей:\n";
            for (int i = 0; i < size; i++)
                cout << TreeArr[i] << "\t";
            cout << endl << endl;
            cout << "\n Дерево в виде массива сыновей:" << endl << endl;
            cout << "  Корень дерева (вершина [0]) = " << root << endl << endl;
            for (int i = 0; i < size; i++)
            {
                cout << "   Вершина [" << i << "] = " << TreeArr[i] << ":" << endl;
                cout << "    Левый сын: " << TreeArr[2 * i + 1] << endl;
                cout << "    Правый сын: " << TreeArr[2 * i + 2] << endl;
            }
            cout << endl << endl;
            break;
        }
        case 3:                     //вывод дерева
        {
            if (TreeArr == nullptr)
            {
                cout << "\n Дерево пустое! Введите дерево!\n";
                break;
            }
            cout << endl << " Дерево:" << endl;
            cout << endl;
            break;
        }
        case 4:                     //определение высоты узла
        {
            if (TreeArr == nullptr)
            {
                cout << "\n Дерево пустое! Введите дерево!\n";
                break;
            }
 
            break;
        }
        case 0:                     //выход из программы
            break;
        default:
        {
            cout << "\n Неверный выбор, попробуйте ещё раз!\n";
            break;
        }
        }
    }
    DeleteMatrix(TreeArr, size);
    cout << "\n Время работы программы = " << clock() / 1000.0 << " сек.\n";  //вывод времени работы программы
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2019, 12:45
Ответы с готовыми решениями:

Деревья. Список сыновей
Здравствуйте. Я не понимаю зачем нужны деревья с использованием списка сыновей. Не понимаю как они реализовываются и где применяются....

Реализовать массив сыновей
Здравствуйте, помогите мне реализовать бинарное дерево в виде массива сыновей, вот само задание: 1) Реализовать представление бинарного...

Бинарное дерево массив сыновей
Привет. Я написал дерево массива сыновей, но не вдупляю как его выводить в виде дерева, могу лишь вывести корень и сыновей каждого узла в...

2
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
19.01.2019, 14:40
А какой смысл запихивать дерево в массив? Можно сделать намного проще, если каждую вершину дерева представить элементом типа struct.

Добавлено через 1 минуту
Функция построения такого дерева будет строчек 6-7 от силы.
0
9 / 9 / 0
Регистрация: 16.06.2018
Сообщений: 22
20.01.2019, 06:43  [ТС]
Цитата Сообщение от jugu Посмотреть сообщение
А какой смысл запихивать дерево в массив? Можно сделать намного проще, если каждую вершину дерева представить элементом типа struct.
Добавлено через 1 минуту
Функция построения такого дерева будет строчек 6-7 от силы.
Смысл в том, что это задание. Представлять дерево структурой не надо, надо сразу заносить элементы дерева в массив сыновей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2019, 06:43
Помогаю со студенческими работами здесь

Реализация дерева поиска список сыновей
Добрый день. Нужно создать 2-а дерева поиска и хранить их &quot;списком сыновей&quot;. В нужно вставить в А используя обратных обход. И вывести...

Найти сумму четных элементов массива целых чисел. Размерность массива – 20. Заполнение массива осуществить случайными числами от 100 до 200
Найти сумму четных элементов массива целых чисел. Размерность массива – 20. Заполнение массива осуществить случайными числами от 100 до 200

Вычисление высоты дерева с использованием представлений левых сыновей и правых братьев
Написать программы вычисления высоты дерева с использованием представлений левых сыновей и правых братьев. :help:

Из сыновей, для каждого из которых известен отец, составить бинарное дерево
Очень нужна помощь со следующей задачей: Необходимо из сыновей, для каждого из которых известен отец, составить бинарное дерево. ...

Не получается создать файл, сохранением массива в файле и заполнение массива значениями из файла
Здравствуйте. Я уже второй день пытаюсь решить проблему с созданием файла, сохранением массива в файле и заполнением массива информацией из...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru