Ok, mi è stato chiesto di implementare un algoritmo per creare un Albero binario di ricerca, implementandolo su array... la costruzione va a buon fine, e in effetti ottengo l'albero da me desdiderato... tuttavia a questo punto non riesco ad implementare correttamente una function di visita INorder, utile a dimostrare la correttezza della costruzione del mio albero... il risultato dovrebbe essere la visualizzazione ordinata degli elementi dell'array (in linea teorica) ma sfortunatamente ottengo solo una parte dei valori e nemmeno ordinati
![]()
il codice è questo:
non riesco bene a capire dove sia l'errore... probabilmente è una sciocchezza da flaggellazione ma ho passato la notte in bianco e sto perdendo colpi :S un anima pia potrebbe aiutarmi ad identificare l'errore?codice:#include<stdio.h> #include<stdlib.h> #include<string.h> /*Scrivere function C iterativa per la costruzione di un albero binario di ricerca rappresentato mediante array.*/ int* creatree(int[],int);//crea albero void inorder(int*);//visita inorder int main() { int i,*albero; int array[10]={0,5,7,8,1,6,3,4,9,2}; printf("--Array iniziale: \n\n-"); for(i=0;i<9;i++) printf("%d-",array[i+1]); albero=creatree(array,10); printf("--Array finale: \n\n-"); for(i=0;i<15;i++) printf("%d-",albero[i+1]); printf("--Visita inorder: \n\n-"); inorder(albero); return 0; } int* creatree(int vett[],int dim) { int *pt; int i,j=1; pt=calloc(16,sizeof(int)); pt[1]=vett[1]; i=2;//secondo elemento effettivo while(i<dim) { j=1; printf("\n#%d# - #%d# (%d)",vett[i],pt[j],j); do{ while(vett[i]<pt[j] && pt[j]!=0) {j=2*j;printf("\n#%d# - #%d# (%d)",vett[i],pt[j],j);} while(vett[i]>pt[j] && pt[j]!=0) {j=2*j+1;printf("\n#%d# - #%d# (%d)",vett[i],pt[j],j);} }while(pt[j]!=0); pt[j]=vett[i]; i++; } return pt; } void inorder(int *pt) { int i=1; printf("\n*%d*\n",pt[i]); if(pt[i]!=0) { inorder(pt+(2*i)); printf("%d-",*(pt+i)); inorder(pt+(2*i+1)); } }
![]()

) ma sfortunatamente ottengo solo una parte dei valori e nemmeno ordinati
Rispondi quotando
