Je crois que mon code est trop bordélique pour être analysé,c'est pour ca que j'en ai pas donné de morceaux.
Sinon,y'a pas moyen de faire ca avec 1 seul pointeur? 
Du coup je vais être obligé d'en crée un localement...
PS : Ma procédure ressemble a ca :
void Insert(TElt **pi){
int choixInsert = 0;
string y = {0};
while(choixInsert != 5){
printf("\n Tapez 1 pour vous deplacer sur le precedent,2 sur le suivant,3 sur le pere et 4 sur le fils.0 pour inserer,5 pour fermer \n");
scanf("%d",&choixInsert);
switch(choixInsert){
case 0 :
scanf("%s",&y);
strcpy((*pi) -> info,y); //Rentre une string dans le champ info
break;
case 1 :
if((*pi) -> ppr == NULL){
printf("Pas d'element");
(*pi) -> ppr = (TElt*)malloc(sizeof(TElt)); //Crée une case mémoire
}
else{
printf("\n %s ",(*pi) -> info);
(*pi) = (*pi) -> ppr;
(*pi) = (TElt*)malloc(sizeof(TElt));
}
break;
case 2 :
if((*pi) -> ps == NULL){
printf("Pas d'element");
(*pi) -> ps = (TElt*)malloc(sizeof(TElt));
(*pi) = (*pi) -> ps;
}
else{
printf("\n %s ",(*pi) -> info);
(*pi) = (*pi) -> ps;
(*pi) = (TElt*)malloc(sizeof(TElt));
}
break;
case 3 :
if((*pi) -> parent == NULL){
printf("Pas d'element");
(*pi) -> parent = (TElt*)malloc(sizeof(TElt));
}
else{
printf("\n %s ",(*pi) -> info);
(*pi) = (*pi) -> parent;
(*pi) = (TElt*)malloc(sizeof(TElt));
}
break;
case 4 :
if((*pi) -> enfant == NULL){
printf("Pas d'element");
(*pi) -> enfant = (TElt*)malloc(sizeof(TElt));
//(*pi) -> enfant -> parent = (*pi);
(*pi) = (*pi) -> enfant;
}
else{
printf("\n %s ",(*pi) -> info);
while((*pi) -> enfant != NULL){
(*pi) = (*pi) -> enfant;
}
}
break;
default :
break;
}
}
}
La ligne mise en commentaire est un essai malheureux. 