По заданию требуется реализовать бинарное дерево для хранения и операций с данными
вида: Деталь, Количество, Поставщик(С++). Я составила фрагмент программы нахождения
имени поставщика , который поставляет наибольшее количество деталей
struct Ttree *Ttree_max (struct Ttree *temp)
{
if (temp==NULL)
return NULL;
while (temp->right!= NULL)
temp= temp-> right;
return temp;
}
Однако такой вариант не подходит, необходимо это сделать методом рекурсии, составить
функцию, проверяющую всех поставщиков (Name) методом обхода всего дерева с вызовом
функции подсчета количества деталей (Const) по каждому поставщику(Name). В процессе
подсчета запомнить элемент с наибольшим количеством, а в конце вывести его на экран(Name).
Помогите разобраться.
Вот часть кода программы:
#include
#include
#include
using namespace std;
struct Ttree
{ int Const;
char Name[30];
char Detal[30];
struct Ttree *left;
struct Ttree *right;
};
struct Ttree* add
(
Ttree *beg, int Const, char Name[30], char Detal[30]
)
{
if (!beg)
{
struct Ttree *temp = new Ttree;
temp->Const = Const;
strcpy_s(temp->Name, 30, Name);
strcpy_s(temp->Detal, 30, Detal);
temp->left = 0;
temp->right = 0;
return temp;
}
else if ((Const)>(beg->Const))
{
beg->right = add(beg->right, Const, Name, Detal);
return beg;
}
else
{
beg->left = add(beg->left, Const, Name, Detal);
return beg;
}
}
___....____
struct Ttree *Ttree_max (struct Ttree *temp)
{
if (temp==NULL)
return NULL;
while (temp->right!= NULL)
temp= temp-> right;
return temp;
}
Ответы
Ответ 1
Чтобы найти Name поставщика с максимальным количеством деталей, необходимо запомнить
текущий максимум и пройтись по всему дереву, заменяя максимум при нахождении большего
количества. Это делается примерно так:
#include