Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 17
1

Подсчет количества вершин бинарного дерева

03.11.2019, 19:49. Показов 907. Ответов 4
Метки нет (Все метки)

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
#include "pch.h"
#include <iostream>
#include <ctime>
#include <cstring>
 
using namespace std;
struct ZKR {
 
    char FACULTY[30];
    int ACADEMIC_DEGREE;
    char FIO[30];
};
 
struct point
{
    char *data;//информационное поле
    point *left;//адрес левого поддерева
    point *right;//адрес правого поддерева
};
 
point* tree(int n, point* p)
{
    point *r;
    int nl, nr;
    if (n == 0) { p = NULL; return p; }
    nl = n / 2;
    nr = n - nl - 1;
    r = new point;
    char s[50];
    cout << "Значение: ";
    cin >> s;
    r->data = new char[strlen(s) + 1];
    strcpy_s(r->data,50,s);
    r->left = tree(nl, r->left);
    r->right = tree(nr, r->right);
    p = r;
    return p;
}
 
void GETDATA(ZKR*M, int N)
{
    cin.ignore();
    for (int i = 0; i < N; i++)
    {
        cout << "\n";
        cout << "FACULTY: ";
        cin.getline(M[i].FACULTY, 30);
        cout << "\n";
        cout << "FIO: ";
        cin.getline(M[i].FIO, 30);
        cout << "\n";
        cout << "ACADEMIC DEGREE: ";
        cin >> M[i].ACADEMIC_DEGREE;
        cin.ignore();
 
    }
}
void treeprint(point *p, int &count) {
    if (p != NULL) {
        treeprint(p->left, count);
        cout << p->data << "  ";
        treeprint(p->right, count);
        if ((p->left == NULL) && (p->right == NULL))
            count = count + 1;
    }
}
 
int main()
{
    setlocale(LC_ALL, "russian");
    srand(time(NULL));
    int n = 0, k = 0, count = 0;
    point *beg = nullptr;
    cout << "Введите кол-во студентов" << endl;
    int N;
    cin >> N;
    
 
    ZKR*M = new ZKR[N];
 
    do
    {
        cout << "1. Посторить бинарное дерево\n";
        cout << "2. Показать бинарное дерево\n";
        cout << "3. Выход\n";
        cin >> k;
        switch (k)
        {
        case 1:
            cout << "Введите количество элементов" << endl;
            cin >> n;
            beg = tree(n, beg);
            cout << endl;
            break;
        case 2:
            treeprint(beg, count);
            cout << endl;
            cout << "Листьев в дереве: " << count << endl;
            break;
 
        //case 3:
            //GETDATA(ZKR*M, N);
            //break;
        }
    } while (k != 4);
    system("pause");
    return 0;
}
Не получается написать функцию подсчета , буду благодарен любой помощи
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2019, 19:49
Ответы с готовыми решениями:

Подсчет вершин бинарного дерева с++
Задача такая: Написать рекурсивную функцию подсчета вершин в дереве. есть такое дерево: #include...

Подсчет количества вершин дерева
Добрый вечер. Возникла проблема в коде, не знаю как &quot;соединить код&quot; всей программы + самого...

Подсчет количества вершин дерева на заданном уровне
Напишите пожалуйста Проги для нахождения количества вершин для дерева на заданном уровне, и кто...

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

4
Мозгоправ
1730 / 1024 / 468
Регистрация: 01.10.2018
Сообщений: 2,137
Записей в блоге: 2
03.11.2019, 21:15 2
h11m4l3yn, я там подправил. Закомментил куски, которые к вопросу не относятся.
Теперь не вылетает.
Теперь количество узлов считает. У вас считало количество листьев.
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
#include "pch.h"
#include <iostream>
#include <ctime>
#include <cstring>
 
using namespace std;
//struct ZKR {
//
//  char FACULTY[30];
//  int ACADEMIC_DEGREE;
//  char FIO[30];
//};
 
struct point
{
    char* data;//информационное поле
    point* left;//адрес левого поддерева
    point* right;//адрес правого поддерева
};
 
point* tree(int n, point* p)
{
    point* r;
    int nl, nr;
    if (n == 0) { p = NULL; return p; }
    nl = n / 2;
    nr = n - nl - 1;
    r = new point;
    char s[50];
    cout << "Значение: ";
    cin >> s;
    r->data = new char[strlen(s) + 1];
    strcpy_s(r->data, strlen(s) + 1, s);
    r->left = tree(nl, r->left);
    r->right = tree(nr, r->right);
    p = r;
    return p;
}
 
//void GETDATA(ZKR* M, int N)
//{
//  cin.ignore();
//  for (int i = 0; i < N; i++)
//  {
//      cout << "\n";
//      cout << "FACULTY: ";
//      cin.getline(M[i].FACULTY, 30);
//      cout << "\n";
//      cout << "FIO: ";
//      cin.getline(M[i].FIO, 30);
//      cout << "\n";
//      cout << "ACADEMIC DEGREE: ";
//      cin >> M[i].ACADEMIC_DEGREE;
//      cin.ignore();
//
//  }
//}
 
void treeprint(point* p, int& count) {
    if (p != NULL) {
        treeprint(p->left, count);
        cout << p->data << "  ";
        count = count + 1;
        treeprint(p->right, count);
    }
}
 
int main()
{
    setlocale(LC_ALL, "russian");
    srand(time(NULL));
    int n = 0, k = 0, count = 0;
    point* beg = nullptr;
    //cout << "Введите кол-во студентов" << endl;
    //int N;
    //cin >> N;
 
 
    //ZKR* M = new ZKR[N];
 
    do
    {
        cout << "1. Посторить бинарное дерево\n";
        cout << "2. Показать бинарное дерево\n";
        cout << "3. Выход\n";
        cin >> k;
        switch (k)
        {
            case 1:
                cout << "Введите количество элементов" << endl;
                cin >> n;
                beg = tree(n, beg);
                cout << endl;
                break;
            case 2:
                count = 0;
                treeprint(beg, count);
                cout << endl;
                cout << "Листьев в дереве: " << count << endl;
                break;
 
                //case 3:
                    //GETDATA(ZKR*M, N);
                    //break;
        }
    } while (k != 4);
    system("pause");
    return 0;
}
Криво у вас всё.
И память не освобождаете.
И структура point у вас стрёмная.
1
Just Do It!
3069 / 1674 / 581
Регистрация: 23.09.2014
Сообщений: 5,224
03.11.2019, 21:28 3
Цитата Сообщение от L0M Посмотреть сообщение
Криво у вас всё.
потому что СИ тут, а не С++
есть мнение, что если начинать обучение с СИ,
то сразу получаем отстуствие оопа в голвном моске фолс-погромиста на многие годы
0
Мозгоправ
1730 / 1024 / 468
Регистрация: 01.10.2018
Сообщений: 2,137
Записей в блоге: 2
03.11.2019, 22:55 4
Цитата Сообщение от XLAT Посмотреть сообщение
потому что СИ тут, а не С++
Не в этом дело. На любом языке можно написать плохо.

И ООП от языка не сильно зависит. Просто одни языки имеют поддержку ООП на уровне синтаксиса, а в других эту парадигму надо поддерживать руками.

А у ТС в голове пока каша. Поэтому и криво.
0
Just Do It!
3069 / 1674 / 581
Регистрация: 23.09.2014
Сообщений: 5,224
03.11.2019, 23:02 5
Цитата Сообщение от L0M Посмотреть сообщение
Не в этом дело.
я сам проходил через это дело,
поэтому точно знаю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2019, 23:02

Рекурсивный подсчет вершин дерева
Доброго времени суток. Есть такое задание: &quot;Написать рекурсивную программу, которая по заданному n...

Рекурсия: подсчет суммы элементов бинарного дерева
Создать бинарное дерево. Написать рекурсивную числовую функцию, которая подсчитывает суму элементов...

Подсчет числа вершин на каждом уровне непустого дерева
Задание: Напишите программу, содержащую процедуру или функцию, которая подсчитывает число вершин...

Запись бинарного дерева в файл и восстановление из него этого дерева
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на...

Написать шаблон бинарного дерева с функцией распечатки дерева
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией...

Создание бинарного дерева из бинарного файла
struct Bin { string name; string city; int players; int score; }; void...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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