Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892

Ошибка в считывание листьев в дереве

17.04.2017, 17:28. Показов 765. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу для считывания листьев в дереве, но в строке 56 ошибка: invalid conversion from 'Tree' to 'int'
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 Tree
{
    int a;
    Tree* right;
    Tree* left;
};
Tree* root;
Tree* cur;
Tree* prev;
int k=0;
int Count(Tree* root);
int main()
{
    root=new Tree;
    root->a=20;
    root->left=NULL;
    root->right=NULL;
    prev=root;
    cur=new Tree;
    cur->a=14;
    cur->left=cur->right=NULL;
    prev->left=cur;
    prev=cur;
    cur=new Tree;
    cur->a=10;
    cur->left=cur->right=NULL;
    prev->left=cur;
    cur=new Tree;
    cur->a=15;
    cur->left=cur->right=NULL;
    prev->right=cur;
    prev=root;
    cur=new Tree;
    cur->a=30;
    cur->left=cur->right=NULL;
    prev->right=cur;
    prev=cur;
    cur=new Tree;
    cur->a=4;
    cur->left=cur->right=NULL;
    prev->right=cur;
    Count(root);
    cout<<Count<<"list'ev"<<endl;
    return 0;
}
int Count(Tree* root)
{
    if ((root->left==0) && (root->right==0))
    {
        return 1;
    }
    else
    {
        return Count(root->left)+(root->right);
    }
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2017, 17:28
Ответы с готовыми решениями:

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

Количество листьев в бинарном дереве
Задача: Найти количество листьев в дереве. Собственно ввод и вывод дерева есть: #include &lt;iostream.h&gt; #include...

Найти сумму листьев в бинарном дереве поиска
Дано бинарное дерево поиска(ключи-целые числа).Найти сумму листьев. Вот мой код.Но он не работает.Скажите почему и исправьте.Спасибо ...

6
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
17.04.2017, 17:34
C++
1
if ((root->left==NULL) && (root->right==NULL))
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
17.04.2017, 17:58
А случайно не вот так ли будет?
C++
1
2
3
4
5
6
7
8
int Count(Tree* root) {
    if ((root->left==NULL)&&(root->right==NULL)) {
        return 1;
    } else if((root->left==NULL)||(root->right==NULL)) {
        return 1;
    } else  return Count(root->left)+Count(root->right);
 
}
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
18.04.2017, 08:41  [ТС]
Peoples, если написать так как написал ты, то будет считывать помимо листьев и элементы, у которых лишь 1 потомок. Но ты очень помог, т.к. оказывается я писал
Pascal
1
return Count(root->left)+(root->right);
А надо было
Pascal
1
return Count(root->left)+Count(root->right);
Но теперь программа завершает работу, видимо плохо элементы связал друг с другом.

Добавлено через 12 часов 2 минуты
Написал, компилятор не выдаёт ошибки, да и логически не нахожу ошибку, но выдаёт неверный ответ, я вручную ввёл дерево с 3-мя листьями, выдаёт 1, где я ошибаюсь? дерево таково:
10
6 11
5 8 15
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
#include <iostream>
using namespace std;
struct Tree
{
    int a;
    Tree* right;
    Tree* left;
};
Tree* root;
Tree* cur;
Tree* prev;
int k=0;
int Pods(Tree* root);
int main()
{
    root=new Tree;
    root->a=10;
    root->left=root->right=NULL;
    prev=root;
    cur=new Tree;
    cur->a=6;
    prev->left=cur;
    cur->left=cur->right=NULL;
    prev=cur;
    cur=new Tree;
    cur->a=5;
    cur->left=cur->right=NULL;
    prev->left=cur;
    cur=new Tree;
    cur->a=8;
    cur->left=cur->right=NULL;
    prev->right=cur;
    prev=root;
    cur=new Tree;
    cur->a=11;
    cur->left=cur->right=NULL;
    prev->right=cur;
    prev=cur;
    cur=new Tree;
    cur->a=15;
    cur->left=cur->right=NULL;
    prev->right=cur;
    
    cout<<Pods<<" list'ev"<<endl;
    return 0;
}
 
int Pods(Tree* root)
{
    if ((root->left==NULL) && (root->right==NULL))
    {
        k=k+1;
        return k;
    }
    else
    {
        return Pods(root->left)+Pods(root->right);
    }
};
0
694 / 7061 / 265
Регистрация: 11.08.2016
Сообщений: 3,965
18.04.2017, 12:43
Еще неплохо бы возвращать 0, если Tree==0
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
30.03.2018, 20:12  [ТС]
Простите, я сменил среду программирования и выводит неверный ответ, думаю что проблема в том, что программа берёт из памяти какие-то данные и выводит их на экран. По сути должно выводить несколько (3, если не ошибаюсь) листа, а выводит 003F14A6 листьев. как исправить? что не так?
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
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Tree
{
    int a;
    Tree* right;
    Tree* left;
};
Tree* root;
Tree* cur;
Tree* prev;
int k = 0;
int Pods(Tree* root);
int main()
{
    root = new Tree;
    root->a = 10;
    root->left = root->right = NULL;
    ::prev = root;
    cur = new Tree;
    cur->a = 6;
    ::prev->left = cur;
    cur->left = cur->right = NULL;
    ::prev = cur;
    cur = new Tree;
    cur->a = 5;
    cur->left = cur->right = NULL;
    ::prev->left = cur;
    cur = new Tree;
    cur->a = 8;
    cur->left = cur->right = NULL;
    ::prev->right = cur;
    ::prev = root;
    cur = new Tree;
    cur->a = 11;
    cur->left = cur->right = NULL;
    ::prev->right = cur;
    ::prev = cur;
    cur = new Tree;
    cur->a = 15;
    cur->left = cur->right = NULL;
    ::prev->right = cur;
 
    cout << Pods << " list'ev" << endl;
    system("pause");
    return 0;
}
 
int Pods(Tree* root)
{
    if ((root->left == NULL) && (root->right == NULL))
    {
        k = k + 1;
        return k;
    }
    else
    {
        return Pods(root->left) + Pods(root->right);
    }
};
Добавлено через 4 часа 11 минут
Исправьте ошибку пожалуйста, строка 16 ошибка это объявление не содержит класс хранения или спецификатор типа
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
#include "stdafx.h"
#include <queue>
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct  Tree
{
    double a; // ключ/данные
    Tree *left; // указатель на левого потомка
    Tree *right; // указатель на правого потомка
};
 
ofstream k1;
k1.open("text.txt");
 
void preorderPrint(Tree *TreeNode)
{
    if (TreeNode == NULL)   // Базовый случай
    {
        return;
    }
    cout << TreeNode->a << " ";
    Write << TreeNode->a << " ";
    preorderPrint(TreeNode->left);   //рекурсивный вызов левого поддерева
    preorderPrint(TreeNode->right);  //рекурсивный вызов правого поддерева
}
 
int main()
{
    Tree *root = new Tree;
    root->a = 10;
    root->left = root->right = NULL;
 
    Tree *cur = new Tree;
    root->left = cur;
    cur->a = 6;
    cur->left = cur->right = NULL;
 
    cur = new Tree;
    root->left->left = cur;
    cur->a = 5;
    cur->left = cur->right = NULL;
 
    cur = new Tree;
    root->left->right = cur;
    cur->a = 8;
    cur->left = cur->right = NULL;
 
    cur = new Tree;
    cur->a = 11;
    root->right = cur;
    cur->left = cur->right = NULL;
 
    cur = new Tree;
    root->right->right = cur;
    cur->a = 15;
    cur->left = cur->right = NULL;
 
    preorderPrint(root);
    return 0;
}
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.03.2018, 20:58
Цитата Сообщение от triatri3 Посмотреть сообщение
строка 16 ошибка
Эта строка не принадлежит никакой функции, поэтому так просто вызвать функцию отсюда нельзя (да и почти ничего другого нельзя сделать).

Но можно написать
C++
1
ofstream k1("text.txt");
Добавлено через 1 минуту
Но вообще глобальные переменные, тем более с такими короткими именами, не есть гуд.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2018, 20:58
Помогаю со студенческими работами здесь

Как в бинарном дереве у всех листьев вычесть введенное число?
вот кусок int main(void) { /* Первоначально дерево пусто*/ sNode *root = NULL; int s, n; cout&lt;&lt;&quot;Vvedite...

Выводит некоректное число после выполнения программы по считыванию листьев в дереве
Выводит некоректное число после выполнения программы по считыванию листьев в дереве. Задание: Дан указатель на корень непустого дерева....

Подсчет листьев в дереве
Привет всем! Было задание написать функцию (countt t), считающую количество листьев у в бинарном дереве t. Я попробовал написать...

Найти количество листьев в дереве
Здравствуйте, у меня вроде все получилось сделать, только, почему всегда ответ получается 0, как это можно исправить #include...

Вычислить количество листьев в бинарном дереве
Вычислить количество листьев в бинарном дереве.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru