Arvore avl 100% funcional c

Disponível somente no TrabalhosFeitos
  • Páginas : 3 (682 palavras )
  • Download(s) : 0
  • Publicado : 5 de outubro de 2012
Ler documento completo
Amostra do texto
# include"stdio.h"


# include"stdlib.h"








struct avl
{
int info;
int bal;
struct avl *pai;
struct avl *esq;
struct avl *dir;
};int avl_height ( struct avl *node )
{
/*retorna a altura da arvore*/


int esq, dir;


if ( node == NULL ) return -1;


esq = avl_height ( node->esq );
dir =avl_height ( node->dir );


if ( esq > dir )
return esq + 1;
else
return dir + 1;
}


























struct avl *rotacaoLL(struct avl*p )
/* Rotação simples para a esquerda */
{
struct avl *q;


q = p->esq;
//----------------> Realiza a rotação
p->esq = q->dir;
if ( q->dir != NULL )q->dir->pai = p;
q->dir = p;
q->pai = p->pai;
if ( p->pai != NULL )
{
if ( p->pai->esq == p )
p->pai->esq = q;
else
p->pai->dir = q;
}p->pai = q;
//----------------> Rebalanceia
q->bal = avl_height ( q->esq ) - avl_height ( q->dir );
p->bal = avl_height ( p->esq ) - avl_height ( p->dir );


return q;
}struct avl *rotacaoRR ( struct avl *p )
/* Rotação simples para a direita */
{
struct avl *q;


q = p->dir;
//----------------> Realiza a rotação
p->dir = q->esq;if ( q->esq != NULL )
q->esq->pai = p;
q->esq = p;
q->pai = p->pai;
if ( p->pai != NULL )
{
if ( p->pai->esq == p )
p->pai->esq = q;
elsep->pai->dir = q;
}
p->pai = q;
//----------------> Rebalanceia
q->bal = avl_height ( q->esq ) - avl_height ( q->dir );
p->bal = avl_height ( p->esq ) - avl_height( p->dir );


return q;
}






void avl_remove ( struct avl **node,int info )
{
int aux;
struct avl * P;
/*se se o elemento nao esta na arvore sai da funçao*/...
tracking img