Arvore avl 100% funcional c
# 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; 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;
}
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*/ if