Eccovi il codice
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct albero* albero_t;
struct albero
{
  char* nome;
  int N;
  int annonascita;
  int annomorte;
  int ID;
  albero_t destro;
  albero_t sinistro;
};
albero_t costruiscialbero(albero_t il, char* nome, int ID, int annonascita, int annomorte);
void stampalbero(albero_t il);
albero_t ricerca(albero_t il,char* nomel);
char* personalongeva(albero_t il);
int main(int argc, char *argv[])
{
  FILE* fp;
  albero_t il; albero_t nodo; il=NULL, nodo=NULL; char* nome; int ID; int annonascita; int annomorte; nome=malloc(sizeof(char)*256);
  fp=fopen("albero.txt","r");
  if (fp==NULL)
  {
    printf("Errore nell'apertura del file\n"); 
    return 0;}
  while(!feof(fp)){
   fscanf(fp,"%256[^ ] %d %d %d\n",nome,&ID,&annonascita,&annomorte);
   il=costruiscialbero(il,nome,ID,annonascita,annomorte); }
      
   stampalbero(il); 
   char* lung; lung=malloc(sizeof(char)*256);
   lung=personalongeva(il); printf("\nil piu' longevo e' %s\n",lung);
   char* nomel; nomel=malloc(sizeof(char)*256); int n;
   printf("\nInserisci il nome da cercare\n"); scanf("%s", nomel); 
   nodo=ricerca(il,nomel);
   if (nodo==NULL) printf("\nNon esiste\n");
   else printf("\n%s->%d->%d->%d\n",nodo->nome,nodo->ID,nodo->annonascita,nodo->annomorte);
             
  system("PAUSE");	
  return 0;
}

char* personalongeva(albero_t il)
{
     int x; char* nomes; nomes=malloc(sizeof(char)*256);
     if(il!=NULL)
     {
        if(((il->annomorte) - (il->annonascita)) > x)
        {
        x=((il->annomorte) - (il->annonascita)); 
        strcpy(nomes,il->nome);}
        personalongeva(il->destro);
        personalongeva(il->sinistro);
        }return nomes;}
        

albero_t costruiscialbero(albero_t il, char* nome, int ID, int annonascita, int annomorte)
{
     if (il==NULL)
     {
       il=malloc(sizeof(struct albero));
       il->nome=malloc(sizeof(char)+256); 
       strcpy(il->nome,nome);
       il->ID=ID;il->annonascita=annonascita;il->annomorte=annomorte;il->destro=NULL,il->sinistro=NULL;
       }
       else if(ID < il->ID) il->sinistro=costruiscialbero(il->sinistro,nome,ID,annonascita,annomorte);
       else if(ID > il->ID) il->destro=costruiscialbero(il->destro,nome,ID,annonascita,annomorte);
       else printf("elemento già inserito\n");
       return(il);
       }
       
void stampalbero(albero_t il)
{
     if(il!=NULL){
       printf("%s->%d->%d->%d\n",il->nome,il->ID,il->annonascita,il->annomorte);
       stampalbero(il->destro);
       stampalbero(il->sinistro);}}
     
albero_t ricerca(albero_t il, char* nomel)
{
     if ((il == NULL)|| strcmp(il->nome,nomel)==0)
     return il; 
     if(strcmp(il->nome,nomel)< 0) return ricerca(il->sinistro, nomel); 
     else return ricerca(il->destro, nomel);}
Tutto funziona tranne la funzione per cercare la persona più longeva (sottolineata in grassetto). Come mai? Grazie in anticipo!