С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 30.05.2019
Сообщений: 7

Как посчитать средний вес ветвей бинарного дерева?

01.02.2020, 00:20. Показов 1008. Ответов 1

Студворк — интернет-сервис помощи студентам
Я совсем новый на этом сайте и не знаю, как тут надо оформлять код, так что пока-что так.
Уже реализован метод для создания узлов дерева с сортировкой по больше-меньше. Нужно теперь как-то получить суммы значений ветвей, но у меня имеется проблема с пониманием того, как надо обходить такие структуры. Я даже не могу вывести его полностью на экран.

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
#include <iostream>
#include <string>
using namespace std;
 
class uzel
{
private:
    int dannye;
    uzel* u_men;
    uzel* u_bol;
public:
    friend class drevo;
};
 
class drevo
{
private:
    uzel* u_PervUzel;
public:
    drevo()
    {
        u_PervUzel = NULL;
    }
    void ZapolDerev(int dannye)
    {
        uzel* u_TekUzel = NULL;
        if (u_PervUzel == NULL)
        {
            uzel* u_NovUzel = new uzel;
            u_NovUzel->u_men = NULL;
            u_NovUzel->u_bol = NULL;
            u_NovUzel->dannye = dannye;
            u_PervUzel = u_NovUzel;
        }
        if (u_PervUzel != NULL)
        {
            u_TekUzel = u_PervUzel;
            uzel* u_NovUzel = new uzel;
            u_NovUzel->u_men = NULL;
            u_NovUzel->u_bol = NULL;
            while (u_TekUzel->dannye != dannye)
            {
                if (dannye < u_TekUzel->dannye && u_TekUzel->u_men == NULL)
                {
                    u_TekUzel->u_men = u_NovUzel;
                    u_TekUzel = u_TekUzel->u_men;
                    u_TekUzel->dannye = dannye;
 
                }
                if (dannye < u_TekUzel->dannye && u_TekUzel->u_men != NULL) u_TekUzel = u_TekUzel->u_men;
                if (dannye > u_TekUzel->dannye && u_TekUzel->u_bol == NULL)
                {
                    u_TekUzel->u_bol = u_NovUzel;
                    u_TekUzel = u_TekUzel->u_bol;
                    u_TekUzel->dannye = dannye;
                }
                if (dannye > u_TekUzel->dannye && u_TekUzel->u_bol != NULL) u_TekUzel = u_TekUzel->u_bol;
            }
        }
    }
    void SredZnach()
    {
        int povorot = NULL;
        int shag = 0;
        uzel* u_TekUzel = u_PervUzel;
        cout << u_TekUzel->dannye << " ";
        while (u_TekUzel->u_men != NULL || u_TekUzel->u_bol != NULL)
        {
            if (u_TekUzel->u_men != NULL) u_TekUzel = u_TekUzel->u_men;
            else u_TekUzel = u_TekUzel->u_bol;
            cout << u_TekUzel->dannye << " ";
        }
    }
}derevo;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string vvod = "&";
    int dannye = 1;
    cout << "Введите vvod [значение], чтобы начать заполнение бинарного дерева" << endl;
    cout << "Введите vyhod, чтобы завершить работу программы" << endl;
    while (vvod != "vyhod")
    {
        cin >> vvod;
        if (vvod == "vvod")
        {
            cin >> dannye;
            derevo.ZapolDerev(dannye);
        }
        if (vvod == "SredZnach") derevo.SredZnach();
    }
}
В методе SredZnach я пытался реализовать предмет своего вопроса. Моя идея состоит в том, чтобы придерживаясь края с меньшими значениями запоминать, где существует ответвление к большим значениям, однако проблема состоит в том, чтобы "запомнить" уже пройденную часть дерева и никогда к ней не возвращаться.

Добавлено через 8 минут
Дополню свой вопрос:
Моя идея состоит в том, чтобы придерживаясь края с меньшими значениями запоминать, где существует ответвление к большим значениям, однако если далее снова встретится ответвление к большим значениям, то уже непонятно, как без костылей вернуться к этому месту через предыдущее большее.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.02.2020, 00:20
Ответы с готовыми решениями:

Подсчитать средний вес ветвей заданного бинарного дерева
Будем называть весом ветви сумму значений всех вершин этой ветви. Требуется подсчитать средний вес ветвей заданного бинарного дерева. ...

Для каждого статуса поставщика посчитать суммарный вес, средний вес и количество уникальных заказных товаров
Вот таблицы spool cre_demo.log CONNECT demo/demo@ORCL prompt prompt Creating table ПОСТАВЩИКИ prompt =========================...

Посчитать количество элементов бинарного дерева
Нужно посчитать количество элементов бинарного дерева.

1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
01.02.2020, 00:43
А почитать теорию не желаете? Алгоритмы обхода деревьев давно придуманы, зачем их заново изобретать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2020, 00:43
Помогаю со студенческими работами здесь

Посчитать количество листьев и неполных вершин заданного бинарного дерева
Всем привет. Нужна срочно помощь. Вот задание: 1.Посчитать количество листьев и неполных вершин заданного бинарного дерева. Спасибо...

Вывести список пассажиров, вес которых превышает средний вес
Здравствуйте. Необходимо вывести список пассажиров, вес которых превышает средний вес. не могли бы вы подсказать что не так (всё...

Рассчитать средний вес мальчиков и средний рост девочек класса
Известны данные об учениках класса(фамилия, вес, рост, пол). Рассчитать средний вес мальчиков и средний рост девочек класса.

Определить средний рост мальчиков и средний вес девочек
Помогите составить программу, что-то не получается....... Задача: По данным свединиям об учениках класса определитьсредний рост...

Как посчитать кол-во контуров и ветвей?
Можно ли по узлам посчитать ветви? И вообще как посчитать кол-во контуров и ветвей?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru