#include <stdio.h>
#include <stdlib.h>
typedef struct no *pno;
typedef struct no {
int bal;
tipo_elem info;
pno dir, esq;
}no;
typedef pno arvore;
arvore raiz;
//-----------------------------//------------------------------------//
void rot_dir(pno p) {
pno q, temp;
q = p->esq;
temp = q->dir;
q->dir = p;
p->esq = temp;
p = q;
}
//-----------------------------//------------------------------------//
void rot_esq(pno p) {
pno q, temp;
q = p->dir;
temp = q->esq;
q->esq = p;
p->dir = temp;
p = q;
}
//-----------------------------//------------------------------------//
void rot_esq_dir(pno p) {
rot_esq(p->esq);
rot_dir(p);
}
//-----------------------------//------------------------------------//
void rot_dir_esq(pno p) {
rot_dir(p->dir);
rot_esq(p);
}
//-----------------------------//------------------------------------//
int altura(arvore 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 fator_balanceamento(arvore r) {
if(r != NULL) {
r->bal = altura(r->dir) - altura(r->esq);
fator_balanceamento(r->esq);
fator_balanceamento(r->dir);
}
}
struct No {
int numero;
struct No *esquerda;
struct No *direita;
};
typedef struct No No;
//-----------------------------//------------------------------------//
void criarArvore(No **pRaiz) {
*pRaiz = NULL;
}
//-----------------------------//------------------------------------//
void inserir (No **pRaiz, int numero) {
if(*pRaiz == NULL) {
*pRaiz = (No *) malloc(sizeof(No));
(*pRaiz)->esquerda = NULL;
(*pRaiz)->direita = NULL;
(*pRaiz)->numero = numero;
}else {
if(numero < (*pRaiz)->numero)
inserir(&(*pRaiz)->esquerda, numero);
if(numero > (*pRaiz)->numero)
inserir(&(*pRaiz)->direita, numero);
}
}
//----------------------------/Exibir Pre Ordem/-----------------------------//
void ExibirPreOrdem(No *pRaiz) { //Raiz-Esq-Dir
if(pRaiz != NULL){
printf("\n%i", pRaiz->numero);
ExibirPreOrdem(pRaiz->esquerda);
ExibirPreOrdem(pRaiz->direita);
}
}
//---------------------------/Exibir Pos Ordem/-------------------------------//
void ExibirPosOrdem(No *pRaiz) {
if(pRaiz != NULL){ // EDR
ExibirPosOrdem(pRaiz->esquerda);
ExibirPosOrdem(pRaiz->direita);
printf("\n%i", pRaiz->numero);
}
}
//--------------------------/Exibir em Ordem/--------------------------------//
void ExibirEmOrdem(No *pRaiz) {
if(pRaiz != NULL){
ExibirEmOrdem(pRaiz->esquerda);
printf("\n%i", pRaiz->numero);
ExibirEmOrdem(pRaiz->direita);
}
}
//---------------------------//--------------------------------//
struct Busca (NO *pRaiz, int chave) {
if(pRaiz->numero == key){
return (pRaiz->numero);
}
if(pRaiz > key){
return (pRaiz->esquerda, key);
}else{
return (pRaiz->direita, key);
}
}
//--------------------------//---------------------------------//
int main() {
No *pRaiz;
criarArvore(&pRaiz);
inserir(&pRaiz, 50);
inserir(&pRaiz, 30);
inserir(&pRaiz, 70);
inserir(&pRaiz, 20);
inserir(&pRaiz, 40);
inserir(&pRaiz, 60);
inserir(&pRaiz, 80);
inserir(&pRaiz, 15);
inserir(&pRaiz, 25);
inserir(&pRaiz, 35);
inserir(&pRaiz, 45);
inserir(&pRaiz, 36);
printf("\nPre Ordem, ERD");
ExibirPreOrdem(pRaiz);
printf("\nPos Ordem, EDR");
ExibirPosOrdem(pRaiz);
printf("\nEm Ordem, RED");
ExibirEmOrdem(pRaiz);
int key
printf("\n\n");
return 0;
}