Implémentation d'une classe arbre en C++

Fermé
Tunisiano87 Messages postés 15 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 13 avril 2010 - 27 nov. 2008 à 17:50
 etudiant uqam - 13 déc. 2008 à 17:23
Bonjour,


J'espere que c'est pas un peu trop demandé ce que je vais demander là, mais bon, j'ai pas trop le choix, donc voilà, j'ai à implémenter cette interface et je ne sais vraiment pas comment commencer tellement c'est flou pour moi, surtout qu'il n'y pas de classe noeud ( la classe Trie elle-même est considérée comme étant une classe noeud ), et que tout ca est nouveau pour moi.
Donc, je vais poster l'interface et si quelqu'un pourrait m'aider à au moins résoudre la méthode d'ajout d'éléments je lui serais fort reconnaissant:


class Trie {
friend class IteratorPrefixe;
public:
// Cree un trie basé sur un alphabet de nblettres, ou nblettres doit avoir une valeur comprise
// entre 1 et NBLETTRESMAX inclusivement
Trie(unsigned nblettres) throw(runtime_error);
// Ajoute un élément dont la clé est donnée en premier argument et le contenu en second argument
// Le contenu doit être défini (pointeur différent de NULL)
// La clé doit être composée de lettres valides (soit les lettres comprises entre a inclusivement et a+nblettres exclusivement
// par exemple : si nblettres vaut 3, a, b et c sont les seuls caractères autorisés;
// si nblettres vaut 15, seules les lettres entre a et o inclusivement sont autorisées.
// Renvoie true si l'insertion a pu se faire, renvoie false sinon.
bool ajouteElement(string, int*) throw(runtime_error);
// Supprime un élément dont la clé est donnée en argument et renvoie le contenu du noeud supprimé
// La clé doit être composée de lettres valides (voir ci-dessus)
// Peut egalement supprimer en meme temps des ancetres du noeud mentionne, si ces ancetres sont devenus inutiles
// Renvoie NULL si l'élément a supprimer n'existe pas
int* supprimeElement(string cle) throw(runtime_error);
// Cherche un élément dont la clé est donnée en argument et renvoie le contenu associé
// La clé doit être composée de lettres valides (voir ci-dessus)
// Renvoie NULL si la clé n'existe pas
int* chercheElement(string cle) throw();
// Classe d'itérateur permettant de parcourir le trie en profondeur en mode préfixe
class IteratorPrefixe;
// Renvoie un itérateur pointant sur le premier élément du parcours du trie en profondeur en mode préfixe
IteratorPrefixe pbegin() throw(runtime_error);
// Renvoie un itérateur pointant au-delà du dernier élément du parcours du trie en profondeur en mode préfixe
IteratorPrefixe pend() throw();

private:
unsigned nbLettres;
int* element;
vector<Trie<int> *> enfants;
Trie<int> * parent;
// Cette fonction supprime un noeud et ses ancêtres devenus inutiles. Elle fait essentiellement le meme travail
// que supprimeElement : c'est la façon de désigner le noeud a supprimer qui change. De plus, contrairement a
// supprimeElement, elle ne retourne aucune information sur le noeud supprimé.
void supprime(Trie<int> * noeud) throw();
// Cette fonction cherche un noeud en fonction d'une clé donnée. Elle fait essentiellement le meme travail
// que chercheElement mais renvoie une référence au noeud trouvé (ou NULL si le noeud n'existe pas)
// La clé doit être composée de lettres valides (voir ci-dessus)
Trie<int>* cherche(string cle) throw(runtime_error);
};

class Trie<int>::IteratorPrefixe{
friend class Trie<int>;
public:
IteratorPrefixe() : arbre(NULL), noeudCourant(NULL), cleCourante("") {};
pair<string, int*> operator*() {return make_pair(cleCourante, noeudCourant -> element);} ;
IteratorPrefixe operator++()throw(runtime_error);
void operator=(IteratorPrefixe iter) {arbre = iter.arbre; noeudCourant = iter.noeudCourant; cleCourante = iter.cleCourante;};
bool operator==(IteratorPrefixe iter) {return arbre == iter.arbre && noeudCourant == iter.noeudCourant;};
bool operator!=(IteratorPrefixe iter) {return arbre != iter.arbre || noeudCourant != iter.noeudCourant;};
private:
Trie<int> * arbre;
Trie<int> * noeudCourant;
string cleCourante;
};


Merci beaucoup ;)

1 réponse

etudiant uqam
13 déc. 2008 à 17:23
Bravo mon gars. Tu es quand même puissant lolll. Il reste 2 jours tout de même, il faut garder espoir...
1