Recherche dans un arbre (en C)

salsa81 Messages postés 1 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 22 août 2009 - 22 août 2009 à 14:53
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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 ?

Merci encore pour votre aide.

1 réponse

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 août 2009 à 09:21
if(v & 1) IMPAIR;


ciao...
BruNews, MVP VC++
0
Rejoignez-nous