AVL

Run Settings
LanguageC
Language Version
Run Command
#include <stdio.h> #include <stdlib.h> typedef struct node{ int info; struct node *dir, *esq; } no; void criarArvore(no **raiz){ *raiz = NULL; } void inserir(no **pRaiz,int info){ if (*pRaiz==NULL){ *pRaiz = (no *) malloc(sizeof(no)); (*pRaiz)->esq = NULL; (*pRaiz)->dir = NULL; (*pRaiz)->info = info; }else{ if(info<(*pRaiz)->info){ inserir(&(*pRaiz)->esq,info); } if(info>(*pRaiz)->info){ inserir(&(*pRaiz)->dir,info); } } int h = altura(&pRaiz) while (h<-1||h>1){ if (h<-1){ if (altura((*pRaiz)->esq)<0){ rot_dir(&pRaiz); }else{ rot_esq_dir(&pRaiz); } } if (h>1){ if (altura((*pRaiz)->dir)>0){ rot_esq(&pRaiz); }else{ rot_dir_esq(&pRaiz); } } h = altura(&pRaiz) } } void remover(no **pRaiz,int info){ if (*pRaiz==NULL){ printf("\nNao existe o valor a ser removido."); return; }else{ if(info<(*pRaiz)->info){ remover(&(*pRaiz)->esq,info); } if(info>(*pRaiz)->info){ remover(&(*pRaiz)->dir,info); } if (info==(*pRaiz)->info){ } } } void exibirPreOrdem(no **pRaiz){ if(*pRaiz!=NULL){ printf("\n%d",(*pRaiz)->info); exibirPreOrdem(&(*pRaiz)->esq); exibirPreOrdem(&(*pRaiz)->dir); } } void exibirEmOrdem(no **pRaiz){ if(*pRaiz!=NULL){ exibirPreOrdem(&(*pRaiz)->esq); printf("\n%d",(*pRaiz)->info); exibirPreOrdem(&(*pRaiz)->dir); } } void exibirPosOrdem(no **pRaiz){ if(*pRaiz!=NULL){ exibirPreOrdem(&(*pRaiz)->esq); exibirPreOrdem(&(*pRaiz)->dir); printf("\n%d",(*pRaiz)->info); } } int Menu(){ printf("\n\nMenu\n"); printf("\n1 - Inserir"); printf("\n2 - Remover"); printf("\n3 - Imprimir"); printf("\n4 - Sair"); printf("\nDigite sua opcao:"); int opcao=0; while (opcao<1&&opcao>4){ scanf("%d",&opcao); } return opcao; } int menuImprimir(){ printf("\n\nMenu de Impressao\n"); printf("\n1 - Pre Ordem"); printf("\n2 - Em Ordem"); printf("\n3 - Pos Ordem"); printf("\nDigite sua opcao:"); int opcao=0; while (opcao<1&&opcao>3){ scanf("%d",&opcao); } return opcao; } int altura (no **r) { if (r == NULL) return -1; else { int he = altura (r->esq); int hd = altura (r->dir); if (he < hd) return hd + 1; else return he + 1; } } void rot_dir(no *p) { no *q, *temp; q = p->esq; temp = q->dir; q->dir = p; p->esq = temp; p = q; } void rot_esq(no *p){ no *q, *temp; q = p->dir; temp = q->esq; q->esq = p; p->dir = temp; p = q; } void rot_esq_dir(no *p){ rot_esq(p->esq); rot_dir(p); } void rot_dir_esq(no *p){ rot_dir(p->dir); rot_esq(p); } int main(void) { no *raiz; criarArvore(&raiz); int valor=0; while(1){ switch(Menu()){ case 1: printf("\nDigite o valor do no a ser inserido: "); scanf("%d",&valor); inserir(&raiz,valor); break; case 2: /*printf("\nDigite o valor do no a ser removido: "); scanf("%d",&valor); remover(&raiz,valor);*/ printf("\nOps! A remocao nao esta pronta ainda."); break; case 3: switch(menuImprimir()){ case 1: exibirPreOrdem(&raiz); break; case 2: exibirEmOrdem(&raiz); break; case 3: exibirPosOrdem(&raiz); break; } break; case 4: return 0; break; } } return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines