Fonction renvoie arbre et supprime plus grand élément

Résolu
Étienne9 Messages postés 1090 Statut Membre -  
Étienne9 Messages postés 1090 Statut Membre -
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


3 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Si l'arbre est trié alors ça semble correct.
    0
  2. Étienne9 Messages postés 1090 Statut Membre 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
    1. KX Messages postés 19031 Statut Modérateur 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
  3. Étienne9 Messages postés 1090 Statut Membre 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
    1. KX Messages postés 19031 Statut Modérateur 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
    2. Étienne9 Messages postés 1090 Statut Membre 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