переделать программу под задание(С++) #include
#include
using namespace std;
struct TREE {
int info, count;
TREE *left, *right;
};
TREE *root=NULL;
int flag=0;
int count=0;
TREE *Search(int info)
{
TREE *current=root;
flag=0;
while(current!=NULL && flag==0)
{
if(info info)
current=current->left;
else if(info>current->info)
current=current->right;
else
flag=1;
}
return current;
}
void Add(TREE **current, int info)
{
if(*current!=NULL)
{
if(info<(*current)->info)
Add(&(*current)->left, info);
else if(info>(*current)->info)
Add(&(*current)->right, info);
else
(*current)->count++;
}
else
{
*current=new TREE;
(*current)->info=info;
(*current)->left=NULL;
(*current)->right=NULL;
(*current)->count=1;
count++;
}
}
void AddLoop(int info)
{
if(root==NULL)
{
root=new TREE;
root->info=info;
root->right=NULL;
root->left=NULL;
root->count=1;
count++;
}
else
{
TREE *current=root;
TREE *parent;
while(current!=NULL)
{
parent=current;
if(info info)
current=current->left;
else if(info>current->info)
current=current->right;
else
{
current->count++;
current=NULL;
}
}
if(info info)
{
current=new TREE;
current->left=NULL;
current->right=NULL;
current->info=info;
current->count=1;
parent->left=current;
count++;
}
else if(info>parent->info)
{
current=new TREE;
current->left=NULL;
current->right=NULL;
current->info=info;
current->count=1;
parent->right=current;
count++;
}
}
}
void Changer(TREE **current, TREE **tmp)
{
if((*current)->right!=NULL)
Changer(&(*current)->right, &(*tmp));
else
{
(*tmp)->info=(*current)->info;
*tmp=*current;
*current=(*current)->left;
}
}
int Delete (TREE **current, int info)
{
int r=0;
if(*current!=NULL)
{
if(info<(*current)->info)
r=Delete(&(*current)->left, info);
else if(info>(*current)->info)
r=Delete(&(*current)->right, info);
else
{
TREE *tmp=*current;
if(tmp->right==NULL)
*current=tmp->left;
else if(tmp->left==NULL)
*current=tmp->right;
else
Changer(&(*current)->left, &tmp);
delete tmp;
count--;
r=1;
}
}
return r;
}
void ShowBackSymmetric(TREE *current, int l)
{
if(current!=NULL)
{
ShowBackSymmetric(current->right, l+1);
for(int i=0; i info << endl;
ShowBackSymmetric(current->left, l+1);
}
}
void Show(TREE *current)
{
if(current!=NULL)
{
Show(current->left);
cout << current->info << "(" << current->count << ")" << "";
Show(current->right);
}
}
void Clear(TREE **current)
{
if(*current!=NULL)
{
Clear(&(*current)->left);
Clear(&(*current)->right);
delete *current;
count--;
if(count==0)
*current=NULL;
}
}
int main()
{
setlocale(LC_ALL,"Russian");
int n, num;
char otv;
do
{
cout << endl << "1. Создать"
<< endl << "2. Добавить"
<< endl << "3. Добавить (цикл)"
<< endl << "4. Удалить"
<< endl << "5. Обратно-симметричный обход"
<< endl << "6. Вывод со счетчиком"
<< endl << "7. Очистить"
<< endl << "0. Выход"
<< endl << " = ";
cin >> otv;
switch(otv)
{
case '1':
cout << endl << "Кол-во элементов = ";
cin >> n;
for (int i=0; i > num;
Add(&root, num);
cout << endl << "Элемент добавлен" << endl;
break;
case '3':
cout << endl << "Введите элемент = ";
cin >> num;
AddLoop(num);
cout << endl << "Элемент добавлен" << endl;
break;
case '4':
if(root!=NULL)
{
cout << endl << "Удаляемый элемент = ";
cin >> num;
if(Delete(&root, num)==1)
cout << endl << "Элемент удален" << endl;
else
cout << endl << "Элемент не найден" << endl;
}
else
cout << endl << "Дерево пустое" << endl;
break;
case '5':
if(root!=NULL)
{
ShowBackSymmetric(root,0);
}
else
cout << endl << "Дерево пустое" << endl;
break;
case '6':
if(root!=NULL)
{
Show(root);
}
else
cout << endl << "Дерево пустое" << endl;
break;
case '7':
Clear(&root);
cout << endl << "Дерево очищено" << endl;
break;
case '0':
break;
default:
cout << endl << "Ошибка" << endl;
break;
}
}while(otv!='0');
cin. get();
}
227
362
Ответы на вопрос:
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Б4502.11.2020 04:04
-
maks11099422.08.2022 08:09
-
Dasa28211.05.2021 01:17
-
vadimash19.03.2023 15:24
-
VILI757510.09.2020 01:33
-
Manikaiva22.08.2021 19:34
-
dfyz231.05.2023 10:02
-
dimasyashenkov312.07.2021 02:16
-
asfandiyarova2003.06.2023 08:58
-
nikipana19.01.2023 06:05
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.