Arvore avl

840 palavras 4 páginas
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

/* Estruturas para uma arvore de inteiros. */ typedef struct _no { int chave; /* Chave para busca */ int bal; /* Indicacao sobre balanceamento: */ /* -1 se esq. maior, 0 se balanceado, 1 se dir maior */ /* Outros campos de dados aqui */

struct _no *esq, *dir; /*Ponteiros para sub-arvores esq e direita*/
} no;

/* Inicializa a arvore (NULL)*/ void inicializa(no **r)
{
(*r) = NULL;
}

/* Busca x em uma arvore binaria de busca. */ no *busca(int x, no *raiz) { while ((raiz != NULL) && (raiz->chave != x)) { if (raiz->chave < x) raiz = raiz->dir; else raiz = raiz->esq; } return raiz;
}

/* Rotacao a direita */ void rot_dir(no **p) { no *aux; aux = (*p)->esq; (*p)->esq = aux->dir; aux->dir = *p; *p = aux;
}

/* Rotacao a esquerda */ void rot_esq(no **p) { no *aux; aux = (*p)->dir; (*p)->dir = aux->esq; aux->esq = *p; *p = aux;
}

/* Insercao em arvores AVL */ int insereAVL(int x, no **p) {

int cresceu;

/* Se a arvore esta vazia insere. */ if (*p == NULL) { *p = (no *) malloc(sizeof(no)); (*p)->chave = x; /* Caso houvesse outros dados eles deveriam ser copiados aqui. */ (*p)->dir = (*p)->esq = NULL; /* Balanceamento de uma folha e sempre perfeito */ (*p)->bal = 0; /* Esta sub arvore cresceu */ cresceu = 1; } /* Senao verifica se tem que inserir a esquerda */ else if ((*p)->chave > x) { /* Tenta inserir a esquerda e ve se a sub-arvore cresceu */ cresceu = insereAVL(x, &(*p)->esq); if (cresceu) { /* Verifica o estado atual de balanceamento */ switch((*p)->bal) { /* Se a arvore dir. era maior nao ha crescimento */ case 1: (*p)->bal = 0; cresceu = 0; break; /* Se a arvore dir. tinha tamanho igual, houve crescimento */ case 0: (*p)->bal = -1; cresceu = 1; break; /* Se a sub-arvore da esq. ja era maior, deve-se re-balancear. */ case -1: /* Verifica qual o

Relacionados

  • Arvore avl
    5073 palavras | 21 páginas
  • Arvore avl
    668 palavras | 3 páginas
  • Árvore AVL
    5925 palavras | 24 páginas
  • Arvore AVL
    462 palavras | 2 páginas
  • arvore avl
    805 palavras | 4 páginas
  • Arvore AVL
    405 palavras | 2 páginas
  • Arvore avl c++
    1024 palavras | 5 páginas
  • Código de Árvore AVL
    1448 palavras | 6 páginas
  • Avl - arvore binaria
    755 palavras | 4 páginas
  • Arvore avl
    7567 palavras | 31 páginas