#include <iostream> #include <string> using namespace std; struct gammal{ -string name; -int score; -gammal *left,*right; -gammal(string n, int s){ --name = n; --score = s; --left = NULL; --right = NULL; -} -void print(){ --cout<<name<<"\t"<<score<<endl; -} }; gammal* add(gammal *g, string n, int s){ -if( g == NULL){ --g = new gammal(n,s); --return g; -} -if(s < g->score) --g->left = add(g->left, n, s); -if(s > g->score) --g->right = add(g->right, n, s); -return g; } void show (gammal *g){ -if(g==NULL) --return; -g->print(); -show(g->left); -show(g->right); } gammal* del(gammal *g){ -gammal *r = g->right; -gammal *L = g->left; -if(r!=NULL){ --gammal *prev=r; --while(r->left!=NULL){ ---prev = r; ---r = r->left; --} --if( prev != r) ---prev->left = r->right; --r->left = g->left; --if(g->right != r) ---r->right= g->right; --delete(g); --return r; -} -if(L!=NULL){ --gammal*prev = L; --while(L->right !=NULL){ ---prev = L; ---L = L->right; --} --if(prev != L) ---prev->right = L->left; --L->right = g->right; --if(g->left != L) ---L->left = g->left; --delete(g); --return L; -} -delete(g); -return NULL; } gammal* del_name(gammal *g, string n){ -if(g==NULL) --return NULL; -if(g->name == n) --return del(g); -g->right = del_name(g->right,n); -g->left = del_name(g->left,n); -return g; } int main(){ -gammal *g=NULL; -int answer; -do{ --cout<<"1) Add"<<endl; --cout<<"2) Show"<<endl; --cout<<"3) Delete"<<endl; --cout<<"4) Exit"<<endl; --cout<<"What would you like to do? "; --cin>>answer; --if(answer==1){ ---string n; ---int s; ---cout<<"Name: "; ---cin>>n; ---cout<<"Score: "; ---cin>>s; ---g = add(g,n,s); --} --else if(answer==2) ---show(g); --else if(answer==3){ ---string n; ---cout<<"Name: "; ---cin>>n; ---g = del_name(g,n); --} -}while(answer >=1 && answer <=3); }