Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2019, 11:42   #1
Yamaxa
Новичок
Джуниор
 
Регистрация: 23.12.2019
Сообщений: 2
Печаль Найти в заданном дереве двоичное поддерево поиска с максимальным количеством элементов

Ребят, не получается, уже 2 день пытаюсь, что только не исправлял разные числа ставишь, какой то бред выводит, может кто делал такую задачу?

#include <iostream>
using namespace std;
struct Tree
{
int d;
Tree*left;
Tree*right;
};
void Add(Tree **u, int x);

int cnt(Tree *u, int &maxx, int &left, int &right);

void Print(Tree *u);




int main()
{
int left = 0;
int right = 0;

int kol = 0;
int maxx = -1;
Tree*u = 0;
Tree* p0;
setlocale(LC_ALL, "RUS");
int x;
for (int i = 0; i < 4; i++)
{
cout << "Введите " << i + 1 << " элемент дерева" << endl;
cin >> x;
Add(&u, x);
}



Print(u);
cout << " "<<endl;



cout << "max ";

int k = cnt(u, maxx, left, right);
cout << k;






}

void Add(Tree **u, int x)
{
Tree *p = *u;
if (p == 0)
{
p = new Tree;
p->d = x;
p->left = 0;
p->right = 0;
*u = p;
return;
}

Tree *p1 = NULL;
p1 = p;

bool priznak = false;
while (p && !priznak)
{
p1 = p;
if (x == p->d)
priznak = true;
else
if (x < p->d)
p = p->left;
else
p = p->right;
}

if (priznak) return;

Tree *pnew = new Tree;
pnew->d = x;
pnew->left = 0;
pnew->right = 0;

if (x < p1->d)
p1->left = pnew;
else
p1->right = pnew;

}


void Print(Tree *u)
{
if (u)
{
Print(u->left);
cout << u->d << endl;
Print(u->right);


}
}





int cnt(Tree *u, int &maxx, int & left, int &right)
{


if (u->left == NULL && u->right == NULL)
return 1;

if (u->left != NULL && u->left->d < u->d)
left = cnt(u->left, maxx, left, right);
if(maxx < left) {
maxx = left;
}
else
left = 0;
if (u->right != NULL && u->right->d > u->d)
right = cnt(u->right, maxx, left, right);
if(maxx < left) {
maxx = left;
}
else
right = 0;


return maxx;

}
Yamaxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти каталог с максимальным количеством файлов sky99 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 27.05.2016 03:18
Найти в таблице человека с максимальным количеством дипломов V-alterman Общие вопросы по Java, Java SE, Kotlin 2 20.11.2014 12:33
количество элементов в бинарном дереве поиска CodeNOT Общие вопросы C/C++ 2 07.12.2011 19:11
Двоичное дерево поиска, количество элементов на каждом уровне Kayot027 Помощь студентам 2 22.01.2011 13:49
Двумерный массив,номер столбца с максимальным количеством четных элементов nondeadlollipop Помощь студентам 4 01.11.2010 07:32