pEmploye chercherEmployePile(pPile p, int num) { pPile p2 = creerPile(); pEmploye pE=NULL; pEmploye pE2=NULL; if(p == NULL) { perror("erreur: pile.c : fonction chercherEmployePile: pointeur NULL"); return NULL; } if (pileVide(p)) { printf("erreur: pile.c : fonction chercherEmployePile: la Pile est vide\n"); return NULL; } while(!pileVide(p)) { pE2 = SommetEmploye(p); if((pE2->num) == num) { pE = pE2; break; } else { depiler(p); empiler(p2,pE2); } } while(!pileVide(p2)) { pE2 = depiler(p2); empiler(p,pE2); } supprimerPile(p2); return pE; }
pNoeud supprimerNoeud(pNoeud arbre, pNoeud noeud) { pNoeud pn, pnS; if(arbre==NULL || noeud==NULL) { perror("erreur: arbre.c : fonction supprimerNoeud: pointeur NULL"); return arbre; } if(noeud->gch==NULL && noeud->drt==NULL) // si c'est une feuille { pn = noeud->pere; if(pn == NULL) arbre = NULL; else if(noeud == pn->gch) pn->gch = NULL; else pn->drt = NULL; } else if(noeud->drt==NULL) // fils gauche n'est pas nul { pn = noeud->pere; if(pn == NULL) arbre = noeud->gch; else if(noeud == pn->gch) pn->gch = noeud->gch; else pn->drt = noeud->gch; noeud->gch->pere = pn; } else if(noeud->gch==NULL) // fils droit n'est pas nul { pn = noeud->pere; if(pn == NULL) arbre = noeud->drt; else if(noeud == pn->gch) pn->gch = noeud->drt; else pn->drt = noeud->drt; noeud->drt->pere = pn; } else //tous les deux fils ne sont pas nul { pnS = succeseurABR(noeud); if(pnS == pnS->pere->gch) pnS->pere->gch = NULL; else pnS->pere->drt = NULL; pnS->pere = noeud->pere; pnS->gch = noeud->gch; pnS->drt = noeud->drt; if(pnS->pere==NULL) arbre = pnS; else if(pnS == pnS->pere->gch) pnS->pere->gch = pnS; else pnS->pere->drt = pnS; if(pnS->gch != NULL) pnS->gch->pere = pnS; if(pnS->drt != NULL) pnS->drt->pere = pnS; } supprimerPile(noeud->pileEmploye); free(noeud); return arbre; }