Bonjour,

Je fais un programme qui utilise des arbres binaire de recherche mais la dernière fonction me pose problème. Elle doit supprimer le noeud ou la feuille recherché(e).

Voici ma struture d'arbre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
typedef struct snoeud{
  int valeur;
  struct snoeud *fg;
  struct snoeud *fd;
} noeud;
 
typedef noeud * arbre;
Voici la fonction telle qu'elle est en ce moment :
(je l'ai déjà modifiée dans tous les sens mais c'est la version qui me donne les résultats les plus correctes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void supprimerElement(arbre *a, int val){
  if( (*a)->valeur == val )
    {
      if( (*a)->fg )
	{
	  (*a) = (*a)->fg;
	  while( (*a)->fd )
	    {
	      (*a) = (*a)->fd;
	    }
	  (*a)->fd = (*a)->fd;
	  (*a) = (*a)->fg;
	}
      else
	{
	  (*a) = (*a)->fd;
	 }
    }
  else
    {
      if( val < (*a)->valeur )
	{
	  supprimerElement( &(*a)->fg, val);
	}
      else
	{
	  supprimerElement( &(*a)->fd, val);
	}
    }
}
Je sais qu'il manque des tests mais je n'arrive pas à les implémenter correctement...

Si vous avez un conseil à me donner je suis preneur
Merci d'avance!

A bientôt