Balanceamento de Arvore AVL - 17/10/2018

Run Settings
LanguageC
Language Version
Run Command
#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; }
Editor Settings
Theme
Key bindings
Full width
Lines