okay grazie mille per le risposte e per i chiarimenti...io ho provato ad implementare questo algoritmo di insersione...ma ci deve essere qualcosa che non va...perchè inserendo una sequenza di numeri che leggo da file, e stampando con l'algoritmo "inOrder" stampa solo l'ultimo numero che legge da file...non sono riuscito a capire il problema...se qualcono mi sa dare una dritta...grazie mille...

input da file : 10 6 10 4 5 4
output: 4

posto qua il codice:
codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct arbero {
        int val;
        struct arbero *left;
        struct arbero *right;
}tree;

tree* NewE ( void );
tree* insertion ( tree* ptr, int v );
void print_in_order ( tree* ptr );

int main ()
{
    tree* root;
    int v;
    FILE  *aptr;
    
    root = NULL;
    
    aptr = fopen("valori.txt","r");
    
    while ( fscanf(aptr,"%d", &v) != EOF ) {
          root = insertion ( root, v );
    }
    fclose(aptr);
    
    print_in_order ( root );
    
    printf ("\n");
    system("pause");
    return(1);
}
tree* insertion ( tree* ptr, int v ) 
{
      if ( ptr ==  NULL ) {
           
           ptr = NewE ( );
           ptr->val = v;
           ptr->left = NULL;
           ptr->right = NULL;
           
      }
      else {
           if ( v < ptr->val ) {
                ptr = insertion ( ptr->left, v );
           }
           else if ( v > ptr->val ) {
                ptr = insertion ( ptr->right, v );
           }
           else {
                printf ("Dato duplicato\n");
           }
      }
      return ( ptr );
}    
void print_in_order ( tree* ptr )
{
     if ( ptr != NULL ) {
          print_in_order ( ptr->left );
          printf ("%3d", ptr->val);
          print_in_order ( ptr->right );
     }
}      
tree* NewE ( void ) 
{
      tree* p;
      
      p = (tree*)malloc(sizeof(tree));
      
      if ( p == NULL ) {
           printf ("Errore allocazione!\n");
           system("pause");
           exit(1);
      }
      return (p);
}