Pages

segunda-feira, 4 de julho de 2016

Algoritmo em C que demostra uma arvore Binária

Algoritmo em C que demostra uma arvore Binária em C, algoritmo insere o nó nos filhos esquerdos como no direito, algoritmo vem com um menu com as opções de inserir nó, que vai inserir automaticamente na esquerda ou direita, e uma opção de imprimir a arvore!

#include<stdio.h>
#include<stdlib.h>
struct ARVORE{
       int valor;
       struct ARVORE *left, *right;
};
typedef struct ARVORE ARV;
ARV *criaArvore();
ARV *criaNoh(ARV *arvore, int v);
int vazia();
void imprimir(ARV *a);
int main(){
    ARV *a = criaArvore();
    int opc, valor;
    do{
        printf("1-inserir noh\n"
               "2-imprimir\n"
               "0-sair\n");
        scanf("%d",&opc);
        switch(opc){
          case 1:
               printf("informe um valor: ");
               scanf("%d",&valor);
               a = criaNoh(a, valor);
          break;
          case 2:
               if(!vazia(a))
                 imprimir(a);
               else
                 printf("AROVORE VAZIA\n");
          break;
          case 0: break;
          default: printf("opcao invalida\n");
        }
     getche();
     system("cls");
    }while(opc != 0);
}
ARV *criaArvore(){
    return NULL;
}
ARV *criaNoh(ARV *arvore, int v){
    ARV *atemp;
    if(arvore == NULL){
       atemp = (ARV*)malloc(sizeof(ARV));
       atemp ->valor = v;
       atemp->left = criaArvore();
       atemp->right = criaArvore();
       return atemp;
       }
    else{
         int dir;
         atemp = arvore;
         ARV *pai = NULL, *raiz = arvore;
         while(atemp != NULL){
           pai = atemp;
           if(v <= atemp->valor){
              dir = 0;
              atemp = atemp->left;
              }
           else{
              dir = 1;
              atemp = atemp->right;
              }
           }
           atemp = (ARV*)malloc(sizeof(ARV));
    atemp->valor = v;
    atemp->left = criaArvore();
    atemp->right = criaArvore();
    if(dir)
      pai->right = atemp;
    else
      pai->left = atemp;
      return raiz;
    }
}
int vazia(ARV *a){
    return a == NULL;
}
void imprimir(ARV *a){
     printf("\nPai %d\n",a->valor);
     if(a->left != NULL)
       printf("Esq: %d\t",a->left->valor);
     else
       printf("Esq: NULL\t");
     if(a->right != NULL)
       printf("Dir: %d\t",a->right->valor);
     else
       printf("Dir: NULL\t");
     if(a->left != NULL)
      imprimir(a->left);
     if(a->right != NULL)
       imprimir(a->right);
}

Duvidas ou Trabalhos para fazer entre em Contato: marcofernando71@gmail.com

0 comentários:

Postar um comentário