Advertisement
sconetto

EDA - Árvore Binária 3

Jun 14th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct _arv {
  5.   int info;
  6.   struct _arv *sae;
  7.   struct _arv *sad;
  8. } arv;
  9.  
  10. void insere(arv **raiz, arv *no) {
  11.   *raiz = no;
  12.   if (!(*raiz)) {
  13.     return;
  14.   }
  15.   else {
  16.     if (no->info < (*raiz)->info)
  17.       insere(&(*raiz)->sae, no);
  18.     else
  19.       insere(&(*raiz)->sad, no);
  20.   }
  21. }
  22.  
  23. void preOrdem(arv *raiz) {
  24.   printf("%d ", raiz->info);
  25.   if (raiz->sae)
  26.     preOrdem(raiz->sae);
  27.   if (raiz->sad)
  28.     preOrdem(raiz->sad);
  29. }
  30.  
  31. void emOrdem(arv *raiz) {
  32.   if (raiz->sae)
  33.     emOrdem(raiz->sae);
  34.   printf("%d ", raiz->info);
  35.   if (raiz->sad)
  36.     emOrdem(raiz->sad);
  37. }
  38.  
  39. void posOrdem(arv *raiz) {
  40.   if (raiz->sae)
  41.     posOrdem(raiz->sae);
  42.   if (raiz->sad)
  43.     posOrdem(raiz->sad);
  44.   printf("%d ", raiz->info);
  45. }
  46.  
  47. int profundidade(arv *raiz) {
  48.   int pe, pd;
  49.  
  50.   pe = pd = 1;
  51.  
  52.   if (!raiz)
  53.     return 0;
  54.  
  55.   if (raiz -> sae)
  56.     pe += profundidade(raiz->sae);
  57.   if (raiz -> sad)
  58.     pd += profundidade(raiz->sad);
  59.  
  60.   if (pe > pd)
  61.     return pe;
  62.  
  63.   return pd;
  64. }
  65.  
  66. int num_nos(arv *raiz) {
  67.   int nos = 1;
  68.  
  69.   if (!raiz)
  70.     return 0;
  71.  
  72.   if (raiz->sae)
  73.     nos += num_nos(raiz->sae);
  74.  
  75.   if (raiz->sad)
  76.     nos += num_nos(raiz->sad);
  77.  
  78.   return nos;
  79. }
  80.  
  81. int busca(arv *raiz, int contador, int chave) {
  82.   if( raiz == NULL || raiz->info == chave )
  83.     return contador;
  84.   if(raiz->info > chave)
  85.     return busca (raiz->sae, contador+1, chave);
  86.   else
  87.     return busca (raiz->sad, contador+1, chave);
  88.   return 0;
  89. }
  90.  
  91. int main() {
  92.   int info, i;
  93.   arv *raiz, *no;
  94.   int N, chave;
  95.   int contador;
  96.  
  97.   raiz = NULL;
  98.   scanf("%d %d", &N, &chave);
  99.  
  100.   for (i = 0; i < N; ++i) {
  101.     scanf("%d", &info);
  102.     no = (arv*) malloc(sizeof(arv));
  103.     no->sae = no->sad = NULL;
  104.     no->info = info;
  105.     insere(&raiz, no);
  106.   }
  107.   printf("\nEm-Ordem: ");
  108.   emOrdem(raiz);
  109.   printf("\n");
  110.   return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement