Enviado em 07/06/2017 - 12:42h
Boa tarde Pessoal,#include <stdio.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
//Definimos o registro que representará cada elemento da árvore avl
struct ARVORE{
int num, altd, alte;
ARVORE *dir, *esq;
};
ARVORE* rotacao_esquerda(ARVORE* aux){
ARVORE *aux1, *aux2;
aux1 = aux->dir;
aux2 = aux1->esq;
aux->dir = aux2;
aux1->esq = aux;
if(aux->dir == NULL){
aux->altd=0;
}else if (aux->dir->alte > aux->dir->altd){
aux->altd = aux->dir->alte+1;
} else{
aux->altd = aux->dir->altd+1;
}
if(aux1->esq->alte > aux1->esq->altd){
aux1->alte = aux1->esq->alte+1;
} else{
aux1->alte = aux1->esq->altd+1;
}
return aux1;
}
ARVORE* rotacao_direita(ARVORE* aux){
ARVORE *aux1, *aux2;
aux1 = aux->esq;
aux2 = aux1->dir;
aux->esq = aux2;
aux1->dir = aux;
if(aux->esq == NULL){
aux->alte=0;
}else if (aux->esq->alte > aux->esq->altd){
aux->alte = aux->esq->alte+1;
} else{
aux->alte = aux->esq->altd+1;
}
if(aux1->dir->alte > aux1->dir->altd){
aux1->altd = aux1->dir->alte+1;
} else{
aux1->altd = aux1->dir->altd+1;
}
return aux1;
}
ARVORE* balanceamento(ARVORE *aux){
int d, df;
d= aux->altd - aux->alte;
if(d == 2){
df = aux->dir->altd - aux->dir->alte;
if (df>=0){
aux = rotacao_esquerda(aux);
} else{
aux->dir=rotacao_direita(aux->dir);
aux = rotacao_esquerda(aux);
}
} else if(d == -2){
df = aux->esq->altd - aux->esq->alte;
if(df <= 0){
aux = rotacao_direita(aux);
} else{
aux->esq = rotacao_esquerda(aux->esq);
aux = rotacao_direita(aux);
}
}
return aux;
}
ARVORE* inserir(ARVORE *aux, int num){
ARVORE *novo;
if(aux == NULL){
novo = new ARVORE();
novo->num = num;
novo->altd = 0;
novo->alte = 0;
novo->esq = NULL;
novo->dir = NULL;
aux = novo;
} else if(num < aux->num){
aux->esq = inserir(aux->esq, num);
if(aux->esq->altd > aux->esq->alte){
aux->alte = aux->esq->altd+1;
} else{
aux->alte = aux->esq->alte+1;
}
aux = balanceamento(aux);
} else{
aux->dir = inserir(aux->dir, num);
if(aux->dir->altd > aux->dir->alte){
aux->altd = aux->dir->altd+1;
} else{
aux->altd = aux->dir->alte+1;
}
aux = balanceamento(aux);
}
return aux;
}
ARVORE* desalocar(ARVORE* aux){
if(aux != NULL){
aux->esq = desalocar(aux->esq);
aux->dir = desalocar(aux->dir);
delete aux;
}
return NULL;
}
int main(void) {
ARVORE *raiz = NULL;
ARVORE *aux;
int op, achou, numero;
do{
std::cout << "\n1 - Inserir";
std::cout << "\n2 - Consultar";
std::cout << "\n3 - Mostrar os elementos da Árvore em ordem";
std::cout << "\n4 - Esvaziar";
std::cout << "\n0 - Sair";
std::cout << "\nDigite sua opcao: ";
std::cin >> op;
if(op < 0 || op > 5){
std::cout << "\nOpcao invalida!!!";
} else if(op == 1){
}else if(op == 2){
}else if(op == 3){
}else if(op == 4){
}
}while (op!= 0);
raiz = desalocar(raiz);
return 0;
}
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Realizar overclock no Miyoo Mini (plus ou normal)
Otimização de memória para máquinas modestas
Direcionar uma URL para Outra No Mikrotik (0)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (1)