#include <stdio.h>
#include <sys/file.h>

typedef struct node { 
	int data;
	struct node  *left;
	struct node  *right;
} 
NODE ;

typedef NODE * BTREE;

BTREE retrieve_tree_aux( int fd )
{
   char buffer[100] ;
   BTREE b ;
  
   read( fd, buffer, 1 ) ;
   if (buffer[0]=='!') return NULL ;
   else {
      b = (BTREE) malloc( sizeof(NODE) ) ;
      read( fd, b, sizeof(NODE) ) ;
      b->left = retrieve_tree_aux( fd ) ;
      b->right = retrieve_tree_aux( fd ) ;
      return b ;
   }
}
 
BTREE retrieve_tree( void ) 
{
   int fd ;
   BTREE b ;
   fd = open("./treetmp",O_RDONLY) ;
   if (fd==-1) {
      perror("retrieve_tree") ;
      exit(1) ;
   }

   b = retrieve_tree_aux( fd ) ;
   close(fd) ;
   return b ;
}

void  print_tree_aux( BTREE b, int indent ) 
{
	int i ;
	for (i=0;i<indent;i++) printf(" ") ;
	if (b==NULL) printf("-\n") ;
	else {
		printf("%c\n",b->data) ;
		print_tree_aux(b->left, indent+5 ) ;
		print_tree_aux(b->right, indent+5 ) ;
	}
}

void print_tree( BTREE b ) 
{
	print_tree_aux( b, 0 ) ;
}

main (int argc, char *argv[])
{
	BTREE mo_tr ;

	mo_tr = retrieve_tree() ;
        print_tree( mo_tr ) ;

}

