Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Даны значения a и n. Вычислить P по формуле Даны значения a и n. Вычислить P=\frac{a+2}{2!}*\frac{a+4}{4!}*...*\frac{a+n}{n!} https://www.cyberforum.ru/ cpp-beginners/ thread1978376.html C++ Реализация восходящего алгоритма сортировки слиянием на C++
Мне задано 2 массива на 100 элементов каждый. Нужно отсортировать восходящей сортировкой слиянием
C++ Вводится последовательность из N целых чисел. Найти наибольшую по значению четную цифру в каждом числе. https://www.cyberforum.ru/ cpp-beginners/ thread1978349.html
Задание: Вводится последовательность из N целых чисел. Найти наибольшую по значению четную цифру в каждом числе. Я написал программу, она работает, но только с числами, которые больше 0. А целые числа состоят еще из отрицательных. Как сделать, чтобы программа работала и с отрицательными числами? #include "stdafx.h" #include <iostream> #include <conio.h> #include <locale> #include <cmath>...
C++ Применение в программах односвязного списке https://www.cyberforum.ru/ cpp-beginners/ thread1978345.html
Написать программу работы с базой данных. База хранится в оперативной памяти в виде структуры. Структура содержит набор переменных разного типа, описывающих сущность согласно варианту. Программа должна обеспечить ввод, поиск, корректировка , добавление и вывод данных. Обувь #include <cstdio> #include <cstdlib> #include <cstring> //підключення бібліотек
C++ C клавиатуры вводится сложное слово (например диван-кровать), поменять местами составляющие
Условие задачи с клавиатуры вводится сложное слово (например диван-кровать), поменять местами составляющие этого слова, при некорректном вводе вывести соответствующее сообщение. Все работает как нужно, только не могу никак вывести сообщение при некорректном вводе, подскажите пожалуйста #include <iostream> #include <string> #include <conio.h> using namespace std; int main() { string...
C++ Поиск последовательностей в одномерном массиве. В моем коде ошибка, нужно ее исправить https://www.cyberforum.ru/ cpp-beginners/ thread1978313.html
Задание: в целочисленном массиве найти две группы наименьшей длины, состоящие из составных чисел. Ниже я прикрепляю свой код, в нем где-то ошибка. Не могу ее найти все никак. Он почему то входит иногда в цикл с условием (p==1) Помогите, пожалуйста, исправить ошибку. #include <iostream> #include <math.h> #include <stdio.h> #define N 15 using namespace std; int main()
C++ Библиотека потокового ввода-вывода и контейнерные классы.Дешифровка https://www.cyberforum.ru/ cpp-beginners/ thread1978307.html
Задание:Создать функцию, которая расшифровывает зашифрованный файл на основании файла- ключа. Функция принимает в качестве параметров имена входного файла, файла-ключа и выходного файла. Функция может реализовать расшифровку, например, выдавая буквы, координаты которых указаны в файле-ключе. Данные обрабатывать через контейнерные классы библиотеки STL (string;vector;list). Вот что...
C++ Пропускает cin
#include <iostream> #include <cstdlib> #include <stdio.h> #include <cstring> #include <fstream> #include <iostream> #include <conio.h> int main() { using namespace std;
C++ Бесконечная мапа и её итератор https://www.cyberforum.ru/ cpp-beginners/ thread1978247.html
Привет всем. короче делаю сортировку мапы, для чего перегоняю first мапы в массив (можно было и с другим контейнером сделать) В связи с этим собсна 2 вопроса: Почему цикл проходит бесконечное количество раз? typename TMap::iterator it; int i=0; for(it=mymap.begin();it!=mymap.end();++it){ chisla=(*it).first;//ЭТА СТРОЧКА i+=1; cout<<(*it).first<<endl;
C++ Вывод части матрицы https://www.cyberforum.ru/ cpp-beginners/ thread1978237.html
Напечатать таблицу, содержащую номера, фамилии и оценку студентов по высшей математике, а также подсчитать средний балл группы по этому предмету.Высшая математика 2 столбец.Помогите пожалуйста #include <stdio.h> #include <conio.h> #include <string.h> void main() { char tab; int a={{4,3,3,4},{5,4,4,5},{3,4,4,4}, {4,3,3,3},{2,3,3,2},{3,5,4,5},
Найти максимальное и минимальные значения в базе данных формата nc C++
Есть база данных формата nc, 3-х мерная база. Нужно в ней найти максимальное и минимальные значения и само собой координаты этих точек.
C++ Как сделать так, чтобы из функции возвращались различные значения? https://www.cyberforum.ru/ cpp-beginners/ thread1978223.html
Ребят, помогите. Имеется такой код, мне надо,чтобы из функции возвращались различные значения. Как это реализовать? #include <iostream> #include <conio.h> #include <string> #include <ctime> using namespace std; void schet(int,int);
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 876
Записей в блоге: 10
12.05.2017, 01:39 0

Реализация деревьев - C++ - Ответ 10426069

12.05.2017, 01:39. Показов 7049. Ответов 11
Метки (Все метки)

Лучший ответ Сообщение было отмечено AndriyNNNQS как решение

Решение

Забыл очистку

trees.h
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
#include <cstddef>
 
namespace trees
{
    // ====================================================
    // declarations
    // ====================================================
    template <typename T>
    struct Node
    {
        T data;
        Node* firstChild;
        Node* nextNeigh;
    };
 
    /// проход по дереву в ширину с предобработкой данных
    /// @param callback - адрес функции обратного вызова для поля данных каждого узла
    template <typename T>
    void traversePreWidth( Node<T>* node, void (*callback)( const T& ) );
 
    /// создание дерева от узла
    /// @param childNum - каким по счёту дочерним узлом данный приходится родительскому
    /// @param callback - адрес функции обратного вызова, возвращающей количество дочерних узлов
    /// которые следует добавить к данному, и возможно устанавливающей поле данных данного узла
    template <typename T>
    void generate( Node<T>* node, Node<T>* parent, size_t childNum,
                   size_t (*callback)( const Node<T>* parent, T& data, size_t childNum ) );
 
    /// создание дерева вместе с корнем
    /// @param callback - адрес функции обратного вызова, возвращающей количество дочерних узлов
    /// которые следует добавить к данному, и возможно устанавливающей поле данных данного узла
    template <typename T>
    Node<T>* generate( size_t (*callback)( const Node<T>* parent, T& data, size_t childNum ) );
 
    /// уничтожение дерева
    template <typename T>
    void dispose( Node<T>* node );
 
    // ====================================================
    // implementation
    // ====================================================
    template <typename T>
    void traversePreWidth( Node<T>* node, void (*callback)( const T& ) )
    {
        if( node == nullptr )
            return;
 
        callback( node->data );
 
        traversePreWidth( node->nextNeigh, callback );
        traversePreWidth( node->firstChild, callback );
    }
 
    template <typename T>
    Node<T>* generate( size_t (*callback)( const Node<T>* parent, T& data, size_t childNum ) )
    {
        Node<T>* root = new Node<T>;
        root->nextNeigh = nullptr;
        generate<T>( root, nullptr, 0, callback );
        return root;
    }
 
    template <typename T>
    void generate( Node<T>* node, Node<T>* parent, size_t childNum,
                   size_t (*callback)( const Node<T>* parent, T& data, size_t childNum ) )
    {
        if( node == nullptr )
            return;
        size_t n = callback( parent, node->data, childNum );
 
        Node<T>* child;
        if( n > 0 )
        {
            child = node->firstChild = new Node<T>;
            generate( child, node, 0, callback );
 
            for( size_t i = 1; i < n; i++ )
            {
                child = child->nextNeigh = new Node<T>;
                generate( child, node, i, callback );
            }
            child->nextNeigh = nullptr;
        }
        else
            node->firstChild = nullptr;
 
    }
 
    template <typename T>
    void dispose( Node<T>* node )
    {
        if( node->nextNeigh )
            dispose( node->nextNeigh );
        if( node->firstChild )
            dispose( node->firstChild );
        delete node;
    }
}
main.cpp
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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include "trees.h"
 
void traverseCallback( const float& data );
 
/// @param data - поле данных узла, для которого вызван callback
/// @param childNum - каким по счёту дочерним узлом данный приходится родительскому
/// @return сколько дочерних узлов следует добавить к данному
size_t generateCallback( const trees::Node<float>* parent, float& data, size_t childNum );
 
int main()
{
    srand( time( 0 ) );
 
    trees::Node<float>* root = trees::generate<float>( &generateCallback );
    trees::traversePreWidth( root, &traverseCallback );
    trees::dispose( root );
}
 
void traverseCallback( const float& data )
{
    std::cout << data << " ";
}
 
/// @param data - поле данных узла, для которого вызван callback
/// @param childNum - каким по счёту дочерним узлом данный приходится родительскому
/// @return сколько дочерних узлов следует добавить к данному
size_t generateCallback( const trees::Node<float>* parent, float& data, size_t childNum )
{
    if( parent )
    {
        data = float( rand() ) / RAND_MAX * parent->data;
        return rand() % ( (int)parent->data / 2 + 1 );
    }
    else
    {
        data = float( rand() ) / RAND_MAX * 10;
        return rand() % 10;
    }
}
Конечно с узлом root получилось негибко, что он создаётся в любом случае. Но задачи по этому поводу и не стояло. Если дорабатывать, надо обернуть в класс.

Вернуться к обсуждению:
Реализация деревьев C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2017, 01:39
Готовые ответы и решения:

Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
1)Учащиеся 8-х классов участвовали в посадке деревьев. 8-а посадил 100 деревьев, 8-б —122 дерева,...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree {...

Слияние деревьев
Сижу, мучаюсь, не могу понять что подразумевается в задании о слиянии деревьев. Подвесить вершину...

Слияние бинарных деревьев
Слияние - это функция выбора элемента из двух Берем два дерева; функцию, которая выбирает один...

11
12.05.2017, 01:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2017, 01:39
Помогаю со студенческими работами здесь

Турнирная сортировка деревьев
Здравствуйте, программа турнирная сортировка деревьев. Но проблема в том, что при компиляции выдает...

Сравнить структуру двух деревьев
Написать два варианта функции(с рекурсией и без). Даны два дерева,два указателя на корни. Функция...

Объединение 2-х бинарных деревьев в одно
Необходима функция объединения 2-х бинарных сбалансированных деревьев в одно.

Контейнеры STL и виды деревьев
подскажите, или покажите где есть эта информация например я знаю, что контейнеры map и set...

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