Fonction renvoie arbre et supprime plus grand élément

Résolu/Fermé
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - Modifié par Étienne9 le 16/12/2012 à 13:50
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - 16 déc. 2012 à 17:55
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
16 déc. 2012 à 14:17
Si l'arbre est trié alors ça semble correct.
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
16 déc. 2012 à 14:40
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 16/12/2012 à 15:10
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 mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
16 déc. 2012 à 16:08
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
16 déc. 2012 à 16:14
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 mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
Modifié par Étienne9 le 16/12/2012 à 17:55
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