rendered paste body#ifndef _ABR_
#define _ABR_
#include <cstring>
#include <iostream>
using namespace std;
class ABR
{
private:
struct Tcell {
int clef;
char * infos;
Tcell * fg;
Tcell * fd;
};
Tcell * racine;
void pvid(Tcell *);
public:
ABR();
~ABR();
bool ajouter(char *, int);
bool supprimer(int);
char * valeur(int);
void vider();
};
ABR::~ABR()
{
vider();
}
ABR::ABR()
{
racine = NULL;
}
void ABR::vider()
{
pvid(racine);
racine = NULL;
}
void ABR::pvid(Tcell * noeud)
{
if(noeud != NULL)
{
pvid(noeud->fg);
pvid(noeud->fd);
delete noeud;
}
}
bool ABR::supprimer(int telclef)
{
Tcell * noeud = racine;
Tcell * pnoeud = NULL;
Tcell * tmp, * ptmp, * pptmp;
while(noeud != NULL && noeud->clef != telclef)
{
if(telclef < noeud->clef)
{
pnoeud = noeud;
noeud = noeud->fg;
}
else
{
pnoeud = noeud;
noeud = noeud->fd;
}
}
if(noeud == NULL)
return false;
else if(noeud->fg == NULL && noeud->fd == NULL)
{
if(pnoeud != NULL)
{
if(pnoeud->fg == noeud)
pnoeud->fg = NULL;
else
pnoeud->fd = NULL;
}
else
racine = NULL;
delete noeud;
}
else
{
pptmp = noeud;
if(noeud->fg != NULL)
{
tmp = noeud->fg;
}
else
tmp = noeud;
ptmp = tmp;
while(tmp != NULL && tmp->fd != NULL)
{
pptmp = ptmp;
ptmp = tmp;
tmp = tmp->fd;
}
if(pptmp->fg == ptmp)
pptmp->fg = NULL;
else
pptmp->fd = NULL;
noeud->clef = ptmp->clef;
delete noeud->infos;
noeud->infos = ptmp->infos;
delete ptmp;
}
return true;
}
bool ABR::ajouter(char * telinfos, int telclef)
{
Tcell * noeud = racine;
Tcell * pnoeud = NULL; /* élément père de noeud */
while(noeud != NULL)
{
if(telclef < noeud->clef)
{
pnoeud = noeud;
noeud = noeud->fg;
}
else if(telclef > noeud->clef)
{
pnoeud = noeud;
noeud = noeud->fd;
}
else /* Si telclef == noeud->clef */
return false;
}
noeud = new Tcell;
noeud->clef = telclef;
noeud->infos = strdup(telinfos);
noeud->fd = NULL;
noeud->fg = NULL;
if(pnoeud != NULL && telclef < pnoeud->clef)
pnoeud->fg = noeud;
else if(pnoeud != NULL && telclef > pnoeud->clef)
pnoeud->fd = noeud;
else /* Si pnoeud est null */
racine = noeud;
return true;
}
char * ABR::valeur(int telclef)
{
Tcell * noeud = racine;
while(noeud != NULL && noeud->clef != telclef)
{
if(telclef < noeud->clef)
noeud = noeud->fg;
else
noeud = noeud->fd;
}
if(noeud == NULL)
return NULL;
else
return noeud->infos;
}
#endif