IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Arbre lexicographique


Sujet :

Langage Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Ok rebel64 merci beaucoup.
    Pour sauve et restaure ce n'était pas très compliqué de toutes les façons...
    A bientôt

  2. #22
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    Bonsoir moufmouf

    Je ne sais pas si ce poste est encore d'actualité (...c'est pas marqué RESOLU donc je continue...)

    J'ai tester le code de suppression que tu m'as proposé. Mais çà ne mache pas.
    L'idée de supprimer la racine à la base de la dernière branche unique était bonne pourtant. Le problème dans ton exercice c'est que les noeud n'ont pas de chainage arrière.C'est un vrai casse tête pour retrouver le noeud qui précède cette dernière branche.

    Voici un code testé et qui marche (sous réserve). J'en ai encore mal de tête:

    Méthodes à ajouter dans ArbreLexicographique

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    	/**
             * @param precNoeudAlt = Noeud qui précède la racine à supprimer
             * @param noeudAlt = racine à supprimer
             * @return true = noeudAlt a été supprimé
             */
    	private boolean supprimerNoeud(NoeudA precNoeudAlt,NoeudA noeudAlt) {
    		if (precNoeudAlt==null || noeudAlt==null) return false;
     
    		if (precNoeudAlt == NoeudVide.getInstance()) return false;
     
    		if (precNoeudAlt instanceof Noeud && ((Noeud)precNoeudAlt).getSucc()==noeudAlt) {
    			((Noeud)precNoeudAlt).setSucc(noeudAlt.getAlt());
    			return true;
    		}
    		else {
    			if ((precNoeudAlt).getAlt()==noeudAlt) {
    				precNoeudAlt.setAlt(noeudAlt.getAlt());
    				return true;
    			}
    		}
    		return false;
    	}
     
    	/**
             * 
             * @param s 
             * @param n = dernier noeud qui n'a pas d'alternative
             * @return
             */
    	private boolean suppression(String s,NoeudA noeudPrec,NoeudA precNoeudAlt,NoeudA noeudAlt) {
    		/*
    		 * Quelles sont les conventions ici ?
    		 */
    		if (s==null) return false;
     
    		/*
    		 * Arrêt si la chaine est épuisée
    		 */
    		if (s.length() == 0) {
    			/*
    			 * N'appartient pas
    			 */
    			if (!(racine instanceof NoeudMarque)) 
    				return false;
    			else
    				return supprimerNoeud(precNoeudAlt, noeudAlt);
    		}
     
    		/*
    		 * Recherche le premier caractère dans les alternatives
    		 */
    		NoeudA noeudCourant;
    		for (noeudCourant=racine; noeudCourant != NoeudVide.getInstance(); noeudCourant=noeudCourant.getAlt()) {
     
    			if (noeudCourant instanceof Noeud) {
    				/*
    				 * Le noeud correspond à la tête de chaine actuelle ?
    				 */
    				if (((Noeud)noeudCourant).getInfo()==s.charAt(0)) {
    					s=s.substring(1);
    					/*
    					 * Le noeud courant fait partie d'une alternative
    					 * 
    					 */
    					if (racine.getAlt() != NoeudVide.getInstance()) {
    						precNoeudAlt = noeudPrec;
    						noeudAlt = noeudCourant;
    					}
    					/*
    					 * Appel réccursif pour le traitement du caractère suivant de la chaine 
    					 */
    					noeudPrec=noeudCourant;
    					noeudCourant=((Noeud)noeudCourant).getSucc();
    					return new ArbreLexicographique(noeudCourant).suppression(s,noeudPrec,precNoeudAlt,noeudAlt);
    				}
    				else if (((Noeud)noeudCourant).getInfo() > s.charAt(0)) return false;
    			}
    			noeudPrec=noeudCourant;
    		}
    		return false;
    	}
     
    	public boolean suppression(String s) {
    		return suppression(s,null,null,racine);
    	}
    Le petit test

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class TestArbre {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    		ArbreLexicographique arbreLexicographique = 
    			new ArbreLexicographique(new NoeudMarque(NoeudVide.getInstance()));
     
    		System.out.println();
    		System.out.println("***************");
    		System.out.println("QUELQUES AJOUTS");
    		System.out.println("***************");
    		System.out.println("Ajout AI ? "+arbreLexicographique.ajout("AI"));
    		System.out.println("Ajout AIL ? "+arbreLexicographique.ajout("AIL"));
    		System.out.println("Ajout AILE ? "+arbreLexicographique.ajout("AILE"));
    		System.out.println("Ajout TOUR ? "+arbreLexicographique.ajout("TOUR"));
    		System.out.println("Ajout AINE ? "+arbreLexicographique.ajout("AINE"));
    		System.out.println("Ajout ALE ? "+arbreLexicographique.ajout("ALE"));
    		System.out.println("Ajout BAR ? "+arbreLexicographique.ajout("BAR"));
    		System.out.println("Ajout BAR ? "+arbreLexicographique.ajout("BAR"));
    		System.out.println("Ajout BAS ? "+arbreLexicographique.ajout("BAS"));
    		System.out.println("Ajout TOITURE ? "+arbreLexicographique.ajout("TOITURE"));
     
    		System.out.println();
    		System.out.println("******************");
    		System.out.println("ARBRE APRES AJOUTS");
    		System.out.println("******************");
    		System.out.println(arbreLexicographique);	
    		System.out.println();
    		System.out.println("*********************");
    		System.out.println("QUELQUES SUPPRESSIONS");
    		System.out.println("*********************");
    		System.out.println("supprime ALE ? "+arbreLexicographique.suppression("ALE"));
    		System.out.println("supprime TOUR ? "+arbreLexicographique.suppression("TOUR"));
    		System.out.println("TOUR appartient ? "+arbreLexicographique.appartient("TOUR"));
    		System.out.println("supprime TOUR ? "+arbreLexicographique.suppression("TOUR"));
    		System.out.println("supprime TOIT ? "+arbreLexicographique.suppression("TOIT"));
    		System.out.println("supprime TOITURE ? "+arbreLexicographique.suppression("TOITURE"));
    		System.out.println("supprime \"\" ? "+arbreLexicographique.suppression(""));
    		System.out.println();
    		System.out.println("************************");
    		System.out.println("ARBRE APRES SUPPRESSIONS");
    		System.out.println("************************");
    		System.out.println(arbreLexicographique);
    	}
     
    }
    Pour le constructeur du singleton j'ai opté pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	protected NoeudVide() {
    		super(null);
    		super.setAlt(this);
    	}
    A bientôt

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    ok je vois tous ça . à bientôt

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Merci rebel 64
    J'ai testé et pratiquement toutes tes méthodes marches.
    C'est dommage que moi mes solutions ne marchaient pas très bien...
    A bientôt

  5. #25
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Par défaut Projet similaire
    Bonjour à tous,

    J'ai un projet de 3 mois similaire à faire et je serais très intéressé par les codes finaux si vous les avez conservé.

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Arbre lexicographique acyclique
    Par cpolos dans le forum Langage
    Réponses: 0
    Dernier message: 22/02/2011, 13h38
  2. Réponses: 1
    Dernier message: 03/01/2009, 15h17
  3. Construction d'un arbre lexicographique
    Par ColonelHati dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/02/2007, 09h40
  4. Arbres Lexicographiques
    Par Legio dans le forum C
    Réponses: 15
    Dernier message: 15/05/2006, 03h28
  5. [Tableaux] [api] Arbre lexicographique
    Par Husqvarna dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2005, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo