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:

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));
  }
}
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?