Imprimindo uma arvore graficamente
Publicado por Leonardo Weslei Diniz 21/01/2008
[ Hits: 18.244 ]
Homepage: http://www.agilesoft.com.br/
Esse programa inmprime uma arvore graficamente ou seja:
15
/ \
13 25
/\ / \
9 14 17 28
/ / \
6 27 31
ficaria assim: (15(13(9(6()))(14()))(25(17())(28(27())(31()))))
#include <stdio.h>
#include <stdlib.h>
typedef struct informacao{ //
   int valor;
}informacao;
typedef struct no{
   informacao dado;
   struct no *sub_arvore_esquerda;
   struct no *sub_arvore_direita;
}no;
no * planta_arvore(no *arvore){
   arvore = NULL;
   return(arvore);
}
no * insere(informacao info, no *arvore){
   if(arvore == NULL){
      arvore = (no *)malloc(sizeof(no));
      arvore->dado = info;
      arvore->sub_arvore_esquerda = NULL;
      arvore->sub_arvore_direita= NULL;
      return(arvore);
   }
   if(info.valor < arvore->dado.valor){
//       printf("%d inserido na esquerda",arvore->dado.valor);
      arvore->sub_arvore_esquerda=insere(info,arvore->sub_arvore_esquerda);
      return(arvore);
   }
   if(info.valor > arvore->dado.valor){
//       printf("%d inserido na direita", arvore->dado.valor);
      arvore->sub_arvore_direita=insere(info,arvore->sub_arvore_direita);
      return(arvore);
   }
   else
      return NULL;
}
int imprime_pre_ordem(no *arvore){/// a função ultilizada foi a pre-ordem pois imprime primeiro a raiz, depois segue pela esquerda e depois pela direita 
   int a=1,b=1;
   if(arvore != NULL){
      printf("(");
      printf("%d",arvore->dado.valor);
      a=imprime_pre_ordem(arvore->sub_arvore_esquerda);///a==0 caso sub_arvore_esquerda==NULL
      b=imprime_pre_ordem(arvore->sub_arvore_direita);///a==0 caso sub_arvore_direita==NULL
      if(b==0 && a==0)printf("()");///imprime  () se e somente se encontrar um nó folha
      else if(b==0 && a!=0);///isso acontece se encontrar um nó com a perna direita null
      else if(b!=0 && a==0);///isso acontece se encontrar um nó com a perna esquerda null
      /**         Observações:
      Existem tambem mais dois casos:
         1°- Para imprimir quando a perna direita ou esquerda for null ou seja quando as raizes da arvore não estiverem completas basta retirar a condição da linha 50 (obs:só imprimira as "pernas" vazias)e atualizar o resto assim:
         if(b==0 && a!=0)printf("()");
         if(b!=0 && a==0)printf("()");
         
         2°- Para imprimir quando a perna direita ou esquerda for null ou as duas basta retirar a condição da linha 50,51,52 e fazer uma condição para cada assim:
         if(b==0)printf("()");
         if(a==0)printf("()");
      
      That's All Folks! (É só isso pessoal!) 
      **/
      printf(")");///fecha a representação de uma raiz
   }else return 0;//retorna 0 caso arvore == NULL 
}
//         testes realizados:
//  caso ativado: (15(13(9(6()))(14()))(25(17())(28(27())(31()))))
//  1° caso: (15(13(9(6()())())(14()()))(25(17()())(28(27()())())))
//  2° caso: (15(13(9(6)())(14))(25(17)(28(27)())))
main(){
   no *arvore,
   *arv,
   *arv2;
   informacao dado;
   int ret,i;
   printf("quantos nos tem a arvore? ");
   scanf("%d",&ret);
   printf("\n");arvore = planta_arvore(arvore);
   for(i=0;i<ret;i++){
      scanf("%d",&dado.valor);
      arvore = insere(dado,arvore);
      if(arvore == NULL);
   }
//     printf("\nEm ordem :");
   imprime_pre_ordem(arvore);
   printf("\n");
}
Cálculo de logaritmo de um número por Série de Taylor em C
Árvore AVL, usando arquivos para armazenamento de dados
3 EP - Poli USP - Angry Birds (angry bixos)
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Secure boot, artigo interessante, nada técnico. (4)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (14)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









