text: #include <stdio.h>
  #include <stdlib.h>
  
  typedef int Item;
  typedef struct arv {
      struct arv *esq;
      Item item;
      struct arv *dir;
  } *Arv;
  
  Arv arv(Arv e, Item x, Arv d) {
      Arv n = malloc(sizeof(struct arv));
      n->esq = e;
      n->item = x;
      n->dir = d;
      return n;
  }
  
  void exibe(Arv A,int n) {
      if( A==NULL ) return;
      exibe(A->dir,n+1);
      printf("%*s%d\n",3*n,"",A->item);
      exibe(A->esq,n+1);
  }
  
  void ins(Item x, Arv *A) {
      if( *A == NULL ) *A = arv(NULL,x,NULL);
      else if( x <= (*A)->item ) ins(x,&(*A)->esq);
      else ins(x,&(*A)->dir);
  }
  
  int main(void) {
      Arv I = NULL;
      Item x;
      puts("\nPara sair, digite um inteiro negativo.\n");
      while (1){
          printf("Item a ser inserido: ");
          scanf("%d", &x);
          if(x < 0) break;
          ins(x, &I);
      }
      exibe(I,0);
      return 0;
  }