Buonasera a tutti,
mi ritrovo a sbattere allegramente la testa contro qualsivoglia spigolo mi si presenti per risolvere il seguente problema(due punti a capo)
stò implementando un albero di ricerca binario molto semplice e perlappuntoporcacciamiseria non funzionante.
Le operazioni da implementare sono le semplici find,add,altezza etc...Finchè le ho dovute implementare ricorsivamente nessun problema tutte funzionanti, ma al momento di passare alla versione iterativa sono arrivati i problemi.Dopo qualche ricerca ho provato a implementare la funzione add con l'aiuto di uno stack che però non ha nessuna intenzione di funzionare.Posto il codice per qualche anima pia..
//----------------------METODI X STACK
#define SIZE 50
Tree *tos, *p1, stack[SIZE];
void push(Tree* i)
{
p1++;
if(p1 == (tos+SIZE)) {
printf("Stack Overflow.\n");
exit(1);
}
p1 = i;
}
Tree* pop(void)
{
if(p1 == tos) {
printf("Stack Underflow.\n");
exit(1);
}
p1--;
return (p1+1);
}
//---------------------------------------------------------------------
void addIt(int x, Tree * T){
tos = stack;
p1 = stack;
if (findIt(x,*T)==1) return;
printf("L'elemento non è stato trovato.Procedo all'inserimento.\n");
int flag=0;
push(T);
Node *node;
do{
&node=(pop());
//printf("Elemento considerato:%d\n",cursor->element);
if (node->element >x){
printf("node->element >x");
if (node->left!=NULL) push((*node)->left);
else flag=1;
}else{
printf("node->element <x");
if (node->right!=NULL) push((*node)->left);
else flag=1;
}
}while (flag==0)
if (node->element > x) node->left=newNode(x);
else node->right=newNode(x);
}
Ah scusate non ho avvertito se qualche vero programmatore C lo legge potrebbe morire per l'uso dei puntatori..Beware!Ringrazio dell'attenzione e spero in qualche replica perchè sono un tantinello nella m.