Есть ответ 👍

переделать программу под задание(С++) #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
Посмотреть ответы 1

Ответы на вопрос:


Естественно планшет                                  

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS