Ok rebel64 merci beaucoup.
Pour sauve et restaure ce n'était pas très compliqué de toutes les façons...
A bientôt
Ok rebel64 merci beaucoup.
Pour sauve et restaure ce n'était pas très compliqué de toutes les façons...
A bientôt
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
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
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); }
Pour le constructeur du singleton j'ai opté pour
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); } }
A bientôt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4protected NoeudVide() { super(null); super.setAlt(this); }
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
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.
Partager