#include #include typedef struct noeud noeud, *abr; struct noeud { int v; abr fg,fd; }; void ajoute(abr *aa,int v) { abr a=*aa; if(!a) *aa=a=malloc(sizeof(*a)), a->v=v, a->fg=a->fd=0; else if(v==a->v) ; else if(v> a->v) ajoute(&a->fd,v); else ajoute(&a->fg,v); } void ajoute_ite(abr *aa,int v) { abr a; while((a=*aa) && v!=a->v) aa= v>a->v ? &a->fd : &a->fg; if(!a) *aa=a=malloc(sizeof(*a)), a->v=v, a->fg=a->fd=0; } abr recherche(abr a,int v) { while(a && v!=a->v) a= v>a->v ? a->fd : a->fg; return a; } void enleve(abr *aa,int v) { abr a; while((a=*aa) && v!=a->v) aa= v>a->v ? &a->fd : &a->fg; if(!a) return; if(!a->fd) *aa=a->fg, free(a); else if(!a->fg) *aa=a->fd, free(a); else { abr b=a->fg; while(b->fd) b=b->fd; enleve(&a->fg,a->v=b->v); } } void aff(abr a) { if(a) printf("("),aff(a->fg),printf("%d",a->v),aff(a->fd),printf(")"); } int main() { abr a=0; int i; for(i=0;i<15;i++) ajoute(&a,i*i%37); aff(a); printf("\n"); for(i=0;i<37;i++) if(recherche(a,i)) printf("%d ",i); printf("\n"); for(i=0;i<15;i++) enleve(&a,i*i%37); aff(a); printf("\n"); return 0; }