Estrutura de Dados - lab 09
#include
#include
#define NUM_ALUNOS 69
#define TAM_NOME 30
typedef enum{false, true} bool; int quant;
// Estrutura NoAluno
/*
Inserir struct
*/
typedef struct no{ char nome[30]; int matricula; int fatBal; struct no* esq; struct no* dir;
} noAluno;
//------------------------------------------------------------------------------
void rotacionarParaDireita(noAluno** atual)
{
noAluno *aux; aux = (*atual); *atual = (*atual)->esq; aux->esq = (*atual)->dir; (*atual)->dir = aux; aux->fatBal = fatorBalanceamento(aux); (*atual)->fatBal = fatorBalanceamento(*atual);
}
void rotacionarParaEsquerda(noAluno** atual)
{
noAluno *aux; aux = (*atual); *atual = (*atual)->dir; aux->dir = (*atual)->esq; (*atual)->esq = aux; aux->fatBal = fatorBalanceamento(aux); (*atual)->fatBal = fatorBalanceamento(*atual);
}
int fatorBalanceamento(noAluno* atual)
{
int lh,rh;
if(atual == NULL) return(0);
if(atual->esq == NULL) lh = 0; else lh = 1 + atual->esq->fatBal;
if(atual->dir == NULL) rh = 0; else rh = 1 + atual->dir->fatBal;
return (rh - lh);
}
// Insercao na árvore AVL void inserirNoArvoreAVL(noAluno** noAtual , noAluno* novoNoAluno){
if(*noAtual == NULL) { *noAtual = novoNoAluno; } else { if(novoNoAluno->matricula < (*noAtual)->matricula) { inserirNoArvoreAVL(&(*noAtual)->esq, novoNoAluno);
if(fatorBalanceamento(*noAtual) == -2) { if(novoNoAluno->matricula < (*noAtual)->esq->matricula) rotacionarParaDireita(noAtual); else { rotacionarParaEsquerda(&(*noAtual)->esq); rotacionarParaDireita(noAtual); }
}