Arvore AVL

Páginas: 2 (462 palavras) Publicado: 16 de setembro de 2014
#include "arvoreAVL.h"

int altura(No* pRaiz) {
if (pRaiz == NULL)
return 0;
int hesquerda = altura(pRaiz->esquerda);
int hdireita = altura(pRaiz->direita);
if(hesquerda >hdireita) {
return hesquerda + 1;
} else {
return hdireita + 1;
}
}

No* criarArvore(int elemento, No* esquerda, No* direita) {
No* n = (No*) malloc (sizeof(No));
n->elemento =elemento;
n->balancear = altura(direita) - altura(esquerda);
n->esquerda = esquerda;
n->direita = direita;
return n;
}

int escreve(No* r) {
if (r!= NULL) {escreve(r->esquerda);
printf("%d(%d)", r->elemento, r->balancear);
escreve(r->direita);
}
}



int EsqEsq(No** r) {
No* b = *r;
No* a = b->esquerda;
b->esquerda = a->direita;a->direita = b;
a->balancear = 0;
b->balancear = 0;
*r = a;
}

int DirDir(No** r) {
No* a = *r;
No* b = a->direita;
a->direita = b->esquerda;
b->esquerda = a;
a->balancear = 0;b->balancear = 0;
*r = b;
}

int EsqDir(No** r) {
No *c = *r;
No *a = c->esquerda;
No *b = a->direita;
c->esquerda = b->direita;
a->direita = b->esquerda;
b->esquerda = a;b->direita = c;
switch(b->balancear) {
case -1:
a->balancear = 0;
c->balancear = 1;
break;
case 0:
a->balancear = 0;
c->balancear = 0;
break;
case +1:a->balancear = -1;
c->balancear = 0;
break;
}
b->balancear = 0;
*r = b;
}

int DirEsq(No** r) {
No *a = *r;
No *c = a->direita;
No *b = c->esquerda;
c->esquerda =b->direita;
a->direita = b->esquerda;
b->esquerda = a;
b->direita = c;
switch(b->balancear) {
case -1:
a->balancear = 0;
c->balancear = 1;
break;
case 0:a->balancear = 0;
c->balancear = 0;
break;
case +1:
a->balancear = -1;
c->balancear = 0;
break;
}
b->balancear = 0;
*r = b;
}

int aux_inserir(No** pRaiz, int elemento,...
Ler documento completo

Por favor, assinar para o acesso.

Estes textos também podem ser interessantes

  • Arvore AVL
  • Arvore avl
  • Arvore avl
  • Arvore avl c++
  • Avl
  • Código de Árvore AVL
  • Arvore avl 100% funcional c
  • A arvore

Seja um membro do Trabalhos Feitos

CADASTRE-SE AGORA!