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

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

01.02.2020, 00:20. Показов 1014. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru