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
|
Noeud& Noeud::insererNouveauNoeud(unsigned int posFilsAScinder, unsigned int nbCaracteresARetrancher) // scinde une arête du noeud courant en deux, en y insérant un nouveau noeud après le nombre de caractères indiqué (adapté pour ukkonen)
{
Noeud& filsAScinder = *fils[posFilsAScinder]; // référence vers le fils dont on va scinder l'arête
unsigned int indexDebutFils = filsAScinder.getIndexDebut(); // on récupère son index de début
filsAScinder.setIndexDebut(indexDebutFils + nbCaracteresARetrancher); // on met à jour le début de l'ancien fils en conséquence
Noeud* pnouveau = new Noeud(indexDebutFils, indexDebutFils + nbCaracteresARetrancher - 1, 0); // on crée un nouveau noeud avec cet index de début et l'index de fin au bon endroit
pnouveau->nouveauFils(&filsAScinder);
setFils(pnouveau, posFilsAScinder);
return *fils[posFilsAScinder];
}
void Noeud::setFils(Noeud* n, unsigned int index)
{
fils[index] = n; // c'est un vector de pointeurs vers des Noeud
fils[index]->pere = this;
}
unsigned int Noeud::nouveauFils(Noeud* n)
{
n->pere = this;
fils.push_back(n);
return fils.size() - 1;
} |
Partager