С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
1

Написать рекурсивную числовую функцию, подсчитывающую сумму элементов дерева

24.04.2019, 19:02. Показов 4008. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать рекурсивную числовую функцию, подсчитывающую сумму элементов дерева.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2019, 19:02
Ответы с готовыми решениями:

Написать рекурсивную числовую функцию, подсчитывающую сумму элементов дерева
Написать рекурсивную числовую функцию, подсчитывающую сумму элементов дерева. Подразумевается...

Написать рекурсивную функцию, подсчитывающую сумму цифр в строке
Написать рекурсивную функцию, подсчитывающую сумму цыфр в строке С помощью данной функции...

Реализовать функцию, подсчитывающую сумму положительных элементов в массиве
Функция, подсчитывающая сумму положительных элементов в массиве Использование перегрузки функций...

Описать функцию подсчитывающую сумму нечётных элементов множества
Прошу написать программу по данному заданию.

15
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
25.04.2019, 07:45 2
Цитата Сообщение от llis58 Посмотреть сообщение
Написать рекурсивную числовую функцию, подсчитывающую сумму элементов дерева
Изи!
Что не получается?
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
25.04.2019, 08:57 3
Вот набросок.
Посылаешь в эту функцию указатель на корень дерева.
Она вычисляет значение текущего элемента и вызывает себя для левого и правого дочерних элементов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct TreeNode
{
    TreeNode* left;
    TreeNode* right;
    int value;
};
 
int getTreeSum(TreeNode* root)
{
    if (!root)
        return 0;
 
    return root->value + getTreeSum(root->left) + getTreeSum(root->right);
}
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
25.04.2019, 12:49  [ТС] 4
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Вот набросок.
А можно мне полный код?
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
25.04.2019, 12:57 5
Цитата Сообщение от llis58 Посмотреть сообщение
А можно мне полный код?
А чего, собственно, не хватает?
Как у Вас реализовано дерево, я не знаю, поэтому представил простенький класс ноды
Мейн сами написать можете? Вроде бы, несложная задача
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
25.04.2019, 16:03  [ТС] 6
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Мейн сами написать можете?
Я прочитал что такое Бинарное дерево, и не понял. У меня даже мейна нет
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
25.04.2019, 16:05 7
Цитата Сообщение от llis58 Посмотреть сообщение
У меня даже мейна нет
Держи
C++
1
2
3
4
5
int main() 
{
    // your code here
    return 0;
{
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
25.04.2019, 16:05 8
Цитата Сообщение от llis58 Посмотреть сообщение
У меня даже мейна нет
Тогда, наверно, стоит для начала не реализовывать структуры данных, а открыть книжку по самым азам языка и посмотреть на его структуру и синтаксис.
Если Вы не знаете, что такое мейн и как его написать, к деревьям пока не подходите - упадут
0
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
25.04.2019, 16:32 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
Держи
int main()
{
* * // your code here
* * return 0;
{
Две строчки лишние, а одна - не правильная.
Плохой мейн)
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
25.04.2019, 16:35 10
Цитата Сообщение от eva2326 Посмотреть сообщение
Две строчки лишние, а одна - не правильная
Если начинаем придираться к фигне, "неправильно" в данной ситуации пишется слитно))
А такой мейн будет понятен основной массе компиляторов, как и Ваши слова почтенной публике)
0
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
25.04.2019, 16:47 11
Цитата Сообщение от dreamer_108 Посмотреть сообщение
А такой мейн будет понятен основной массе компиляторов
Такой мейн не поймёт (и не простит) ни один из существующих компиляторов)
1
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
25.04.2019, 17:03 12
А, скобка не та?) Ладно, свою вину признаю - он не скомпилируется, но все равно, по моему, докопались до фигни)
Ну и лучше уж тогда про нее и написать, чем сказать, что мейн плохой)
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
25.04.2019, 20:53 13
llis58, здравствуйте! Вот:

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
/*
Подсчитать сумму элементов в бинарном дереве. Для решения использовать рекурсивную функцию.
*/
 
#include <iostream>
 
    using namespace std;
 
struct Node { 
    char data;
    Node* left;
    Node* right;
};
 
Node* add(int data) {
    Node* node = new Node; 
    node->data = data;
    node->left = NULL; 
    node->right = NULL; 
    return node;
}
 
Node* insert(Node* node, int key) {
    if (node == NULL)
        return add(key);
    if (key < node->data)
        node->left = insert(node->left, key);
    else if (key >= node->data)
        node->right = insert(node->right, key);
    return node;
}
 
int sum_of_nodes(Node* node) {
    static int sum  = 0;
    if (node == NULL)
        return 0;
    sum_of_nodes(node->left);
    sum += node->data;
    sum_of_nodes(node->right);
    return sum;
}
 
int main() {
    int n, val;
    cout << "Enter a number of nodes:\n";
    cout << "n = ";
    cin >> n;
    cout << "Enter a binary tree nodes:\n";
    Node* root = NULL;
    for (int i = 1; i <= n; i++) {
        cout << i << " => ";
        cin >> val;
        if (i == 1) {
            root = insert(root, val);
        } else {
            insert(root, val);
        }
    } 
    cout << "Output of the program: " << sum_of_nodes(root) << "\n"; 
    system("pause");
    return 0;
}
Добавлено через 18 минут
llis58, вот более компактный вариант функции:

C++
1
2
3
4
5
int sum_of_nodes(Node* node) {
    if (node == NULL)
        return 0;
    return node->data + sum_of_nodes(node->left) + sum_of_nodes(node->right);
}
1
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
01.05.2019, 11:28  [ТС] 14
Цитата Сообщение от Fixer_84 Посмотреть сообщение
здравствуйте! Вот:
Здрасвуйте, а можете объснить как работает код? Заранее спасибо
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
01.05.2019, 15:35 15
Лучший ответ Сообщение было отмечено llis58 как решение

Решение

llis58, здравствуйте! Я сейчас скину комментарии, но чтобы понять бинарное дерево поиска нужно понять как оно строится и как происходит его обход. Об этом можно поискать в интернет на тему BST (Binary Search Tree). Это не совсем простая тема.

Добавлено через 14 минут
llis58, вот код с комментариями:

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
/*
Подсчитать сумму элементов в бинарном дереве. Для решения использовать рекурсивную функцию.
*/
 
#include <iostream>
 
    using namespace std;
 
struct Node { //Объявляем элемент типа struct (структура узла бинарного дерева)
    char data; //Хранит значение 
    Node* left; //Указатель на левого потомка
    Node* right; //Указатель на правого потомка
};
 
Node* add(int data) { //Функция создания узла бинарного дерева поиска
    Node* node = new Node; //Создаем элемент типа Node (то есть, элемент вышеупомянутой структуры)
    node->data = data; //Начальное значение элемента бинарного дерева поиска (обращение к элементу)
    node->left = NULL; //Начальное значение левого потомка (обращение к левому потомку)
    node->right = NULL; //Начальное значение правого потомка  (обращение к правому потомку)
    return node;
}
 
Node* insert(Node* node, int key) { //Рекурсивная функция вставки элемента (созданного узла) в бинарное дерево поиска (BST)
    if (node == NULL)
        return add(key); //Левая или правая рекурсия раскрутилась до конца, добавляем новый элемент со значением key)
    if (key < node->data)
        node->left = insert(node->left, key); //Если элемент меньше родителя, размещаем его слева (левый потомок)
    else if (key >= node->data)
        node->right = insert(node->right, key);  //Если элемент больше или равен родителю, размещаем его справа (правый потомок)
    return node; //Возвращаем построенный узел (вставка элемента в дерево)
}
 
int sum_of_nodes(Node* node) { //Функция подсчета суммы элементов дерева
    if (node == NULL)
        return 0;
    return node->data + sum_of_nodes(node->left) + sum_of_nodes(node->right); //Рекурсивно обходим дерево и складываем корень с остальными элементами
}
 
int main() {
    int n, val;
    cout << "Enter a number of nodes:\n";
    cout << "n = ";
    cin >> n;
    cout << "Enter a binary tree nodes:\n";
    Node* root = NULL; //Инициализируем корень дерева (пустой элемент)
    for (int i = 1; i <= n; i++) {
        cout << i << " => ";
        cin >> val;
        if (i == 1) {
            root = insert(root, val); //Добавляем корень дерева
        } else {
            insert(root, val); //Добавляем остальные элементы
        }
    } 
    cout << "Output of the program: " << sum_of_nodes(root) << "\n"; //Выводим сумму элементов дерева
    system("pause"); 
    return 0;
}
Добавлено через 7 минут
llis58, еще можете посмотреть тему односвязные списки (linked lists). Там также представлена структура с указателем на следующий элемент, но в отличие от дерева там только один указатель на следующий элемент. Там также возможен рекурсивный обход. Лучше начать с более простого.
1
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
01.05.2019, 16:10  [ТС] 16
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Это не совсем простая тема.
Благадарю, за полное объяснение)
0
01.05.2019, 16:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2019, 16:10
Помогаю со студенческими работами здесь

Реализовать функцию, подсчитывающую сумму положительных элементов в массиве
описать шаблон функции: Функция, подсчитывающая сумму положительных элементов в массиве

Написать функцию, подсчитывающую количество элементов во множестве А типа М
Народ такое вот условие для программы понятие не иею что тут делать подскажите пожалуйста Пусть...

Описать функцию poz(s), подсчитывающую сумму положительных элементов в файле s
мне со школой не повезло. на информатике в интернете сидели, а в универе паскаль... все в быстром...

Описать функцию отриц (s), подсчитывающую сумму отрицательных элементов в серии s
type серия = file of real; Описать функцию отриц(s), подсчитывающую сумму отрицательных элементов в...


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

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