Ciao a tutti!!
ho un problema con un albero...devo realizzare un albero che data una stringa di carateri(AxAAxxAxx) in input mi dia in otput l'albero di parsing di quest'ultima secondo un determinato formato.(dove 'A' corrisponde ad un nodo con 2 figli e ad 'x' una foglia)
Ho fatto l'albero e ho fatto la stampa ma ho poblemi durante l'inserimento nell'albero...ovvero: una volta "riempito" il sottoalbero sinistro dovrei far risalire il mio puntatore up di padre in padre e inserire, ove possibile, a destra.
Mi riesce solo per stringhe corte dicendo al puntatore di salire(->up->up->up..)...ma non riesco ad implementare una versione "automatica" o ricorsive che faccia salire il puntatore utomaticamente.
qualcuno potrebbe aiutarmi?spero di essere stato abbastanza chiaro!
Grazie mille in anticipo!
questo è il mio codice per l'inserimento:

void parsinsert(parstree *parstree, item w){


int i=0;
int valore=0;
parsnode *x;
while (w[i]) {
if(w[i]=='A'){
valore=2;}
else{
valore=0;}
x=insert(parstree,w[i],valore);
i++;
}

}


parsnode *insert(parstree *parstree, char k, int valore)
{
parsnode *q = malloc(sizeof(parsnode));
parsnode *r = parstree->root;
parsnode *s = parstree->nil;

if(!q) {
fprintf(stderr,"Errore di allocazione C\n");
exit(-4);
}

q->v=k;
q->i=valore;
q->left = q->right =parstree->nil;
while(r != parstree->nil) {
s = r;
if(s->left->i !=0)
r=r->left;
else
if(s->right->i !=0)
r=r->right;
else{
if ((s->up->right->i != 0)||(s->up != parstree->nil))
r=r->up->right;

}
}

q->up = s;
if(s == parstree->nil)
return parstree->root = q;
if(s->left->i !=0)
s->left = q;
else if(s->right->i !=0)
s->right = q;
else {
if ((s->up->right->i != 0)||(s->up != parstree->nil))
s->up->right=q;

}

return q;}