Questo e' il codice ma non riesco ad uscirne fuori, il primo elemento lo inserisce dal secondo si blocca e va in loop, almeno mi sembra. Dov'è l'errore ?

#include<stdlib.h>
#include<stdio.h>


typedef struct tree_el {
int val;
struct tree_el *rtree;
struct tree_el *ltree;
}btree;


btree* insert(btree* albero, int val){
int posizione=0;

if(albero==NULL) {
albero = (btree*)malloc(sizeof(btree));
albero->rtree==NULL;
albero->ltree==NULL;
albero->val=val;
printf("\t Valore inserito !");
return albero;
}
else{
printf("\n\t Inserisci la posizione (sinistra = 1, destra = 0): ");
scanf("%d",&posizione);
if(posizione==1)
albero->ltree = insert(albero->ltree, val);
else if(posizione==0)
albero->rtree = insert(albero->rtree, val);
else{
printf("\n Errore");
}
}
}

int main(void){


btree* a=NULL;
int n;
int val;
do{
printf("\n\t Inserisci il valore (digita 0 per finire l'inserimento) : ");
scanf("%d",&n);
if(n!=0)
a = insert(a,n);
}while(n!=0);
return 1;
}