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
| /* paramètre : arbre * lignée * bool
but : On désire faire pointer un arbre grace à sa ligné associé
dans un arbre de recherche
procédé : l'arbre de recherche contient pour noeud, chaque noeud crée
pointe sur un tableau de 10 autres noeud.
en lisant de gauche à droite chaque chiffre, successivement,
du numéro de lignée, on prend le chemin du noeud correspondant
au chiffre, jusqu'a atteindre le dernier noeud, associé au dernier
chiffre, on saisie alors la lignee dans la var correspondante
et on fait pointé le "treelink" de ce noeud vers l'arbre.
info sup : - le bool sert à prendre en compte les 0, même si il se trouve à gauche
- je verifie 2 fois si les pointeur sont nul, une première, au cas je l'ai
déjà créer pour une lignée précédente, une seconde pour l'erreur */
void CreateResearchTree(tree arbre, lignee path, Bool zero){
int i,a,b;
int count=0;
tree abre1= arbre;
if(Retree== NULL){
Retree = (researchTree*)malloc(sizeof(researchTree));
}
if(Retree==NULL){
printf("ERREUR fct::CreateResearchTree----> Retree\n");
exit;
}
//on initialise l'arbre linktree
if(Retree->linktree==NULL){
CreateTree(Retree->linktree);
}
if(Retree->linktree==NULL){
printf("ERREUR fct::CreateResearchTree----> linktree\n");
}
//on initialise le tableau de Rtree
if(Retree->Rtree==NULL){
Retree->Rtree= (researchTree*)malloc(sizeof(researchTree) *10);
}
if(Retree->Rtree==NULL){
printf("ERREUR fct::CreateResearchTree----> Rtree[%d]\n",i);
exit;
}
while(num>=100){ //on veut isoler les deux premier chiffre de "timeline"
num/=10;
count++;
}
count++;
if(zero = Vrai){ // on check si le dernier premier chiffre était un zero
a=0;
}
else{
a=num/10; // on garde le premier chiffre de "timeline" pour ne lancé la fonction que sur le noeud correspondant
}
if(count ==1){ // si il ne reste qu'un dernier chiffre
Retree->timeline= path;
Retree->linktree= arbre;
return;
}
else{
Retree->timeline=0;
}
if (num%10==0 ){
b=CreateResearchTree(arbre, timeline, Vrai); //si le second chiffre est zero, il ne sera pas pris en compte c'est un cas particulier
}
else{
b=CreateResearchTree(arbre, timeline%(10^count), Faux); //on reffet la meme fonction avec "timeline" privee de son premier chiffre
}
Retree->(Rtree+a)->b;
return;
} |
Partager