Fonction renvoie arbre et supprime plus grand élément

Résolu
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   -  
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai fait un algorithme dmax qui renvoie l'arbre privé de l'élément le plus grand et je voulais savoir si c'était bon.

Merci beaucoup d'avance.


fonction avec retour Arbre dmax(arbre A)
Début
	si (A est vide)
		retourner A;
	sinon 
		si (A.d est vide)
			retourner A.g;
		sinon 
			A.d = dmax(A.d);
			retourner A;
		fin si
	fin si
Fin





A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Si l'arbre est trié alors ça semble correct.
0
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonjour,

Oui c'est un arbre binaire de recherche.
Et ceci, est-ce correct s'il vous plaît ?

fonction avec retour entier max(Arbre A)
Début
	si (A est vide)
		retourner +infini
	sinon
		si (A.d est vide)
			retourner A.val;
		sinon
			retourner max(A.d);
		fin si
	fin si
Fin


fonction avec retour Arbre supprimer(Arbre A, entier x)
Début
	si (A est vide)
		retourner A;
	sinon 
		si (A.val == x)
			si (A.g est vide)
				retourner A.d;
			sinon
				si (A.d est vide)
					retourner A.g;
				sinon
					A.val = max(A.g);
					A.g = dmax(A.g);
					retourner A;
				fin si
			fin si
		sinon
			si (A.val > x)
				A.d =  supprimer(x,A.d);
				retourner A;
			sinon
				A.g = supprimer(x,A.g);
				retourner A;
			fin si
		fin si
	fin si
Fin
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je trouve maladroit le choix de +infini comme maximum d'un arbre vide, NaN serait plus approprié.

Sinon je ne suis pas d'accord avec cette partie là :

			si (A.val > x)
				A.d =  supprimer(x,A.d);
				retourner A;
			sinon
				A.g = supprimer(x,A.g);
				retourner A;
			fin si

C'est l'inverse :
			si (x > A.val)
				A.d =  supprimer(x,A.d);
				retourner A;
			sinon
				A.g = supprimer(x,A.g);
				retourner A;
			fin si
0
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   49
 
Merci beaucoup. Par contre pour l'ajout d'un élément dans un AVL pouvez-vous m'aider à faire l'algo s'il vous plaît ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu trouveras déjà tout ce qu'il faut sur Wikipedia et autre sites. Depuis 50 ans que cet algorithme existe tu n'es pas le premier à qui on demande de faire ça !
0
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   49
 
Je ne m'en sors pas.
Voici ce que j'ai fait :
fonction avec retour Arbre ajouter_avl(entier x, Arbre A) 
Début 
 si (A est vide) 
  Arbre B = nouvel Arbre; 
  B.val = x; 
  return B; 
 sinon 
  si (x < A.val) 
   A.g = rééquilibrer(ajouter_avl(x,A.g)); 
   return A; 
  sinon 
   A.d = rééquilibrer(ajouter_avl(x,A.d)); 
   return A; 
  fin si 
 fin si 
Fin 

fonction avec retour Arbre rééquilibrer(Arbre A) 
Début 

....
0