salsa81
Messages postés1Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention22 août 2009
-
22 août 2009 à 14:53
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
23 août 2009 à 09:21
Bonjour,
Voilà je suis en train de faire quelques révision sur les arbres en C et je bloque sur un point.
J'ai un arbre dont voici la structure :
/* Définition d'un noeud */
typedef struct n {
typedonnee val;
struct n *gauche;
struct n *droit;
} typeNoeud;
Cet arbre contient des valeurs entrières saisies au clavier par l'utilisateur.
J'aimerai maintenant supprimer les valeurs qui sont paires. Pour cela la fonction detruireNoeud a déjà été créée.
/* Detruire le noeud dont la valeur est val */
/* Résultat : FAUX si la valeur n'est pas dans l'arbre */
int detruireNoeud (typeNoeud **racine, int val) {
typeNoeud *noeud, *pere;
int res;
if (*racine == NULL) {
res = FAUX; // Valeur pas trouvee
} else {
noeud = *racine;
if (val < noeud->val) {
res = detruireNoeud (&noeud->gauche, val);
} else if (val > noeud->val) {
res = detruireNoeud (&noeud->droit, val);
} else {
res = VRAI;
// On a trouve le noeud a detruire
if (noeud->gauche == NULL) { // Il n'a pas de fils gauche
*racine = noeud->droit;
free (noeud);
} else if (noeud->droit == NULL) {// Il n'a pas de fils droit
*racine = noeud->gauche;
free (noeud);
} else {
// On va chercher le + grand noeud dans le sous arbre de gauche
noeud = noeud->gauche;
if (noeud->droit == NULL) {
(*racine)->gauche = noeud->gauche;
} else {
while (noeud->droit != NULL) {
pere = noeud;
noeud = noeud->droit;
}
pere->droit = noeud->gauche;
}
// Noeud contient la valeur qui va remplacer la valeur du noeud à détruire
(*racine)->val = noeud->val;
free(noeud);
}
}
}
return res;
}
Maintenant je bloque, comment faire pour que la suppression se fasse uniquement sur les valeurs paires ? Avez vous une idée ? un bout de code ?