Algoritmos de Árvores Binárias
#include
typedef struct arvore
{
int info; struct arvore *esq,*dir;
};
void insere(struct arvore **inicio, int info)
{
struct arvore *aux; /* Como a funçao é recursiva, em alguem momento receberá um início igual a NULL, ou caso a árvore esteja vazia. */ if (!*inicio) { if((aux = (struct arvore*) malloc(sizeof(struct arvore))) != NULL) { aux -> info = info; aux -> dir = NULL; aux -> esq = NULL; *inicio = aux; } else printf("Nao foi possivel alocar memoria"); } else { /* Se o info atual for MAIOR que o valor a ser inserido, então esse valor será inserido do lado ESQUERDO. */ if ((*inicio)->info > info) insere(&((*inicio)->esq), info); else /* Se o info atual for MENOR que o valor a ser inserido, então esse valor será inserido do lado DIREITO. */ if((*inicio)->info < info) insere(&((*inicio)->dir), info); /* Caso ele seja igual, isso significa que já pertece a árvore.*/ else printf("%d ja pertence a arvore \n", info); }
}
int main()
{
struct arvore *oi = NULL; //10, 5, 12, 1, 7, 16, 14 e 20 insere(&oi, 10); insere(&oi, 5); insere(&oi, 12); insere(&oi, 1); insere(&oi, 7); insere(&oi, 16); insere(&oi, 14); insere(&oi, 20); system("pause");
}
---HeapSort
#include
#include
#include
#include
#include
#include
//http://www.hardware.com.br/comunidade/busca-binaria/1162141/
//http://www.ufjf.br/jairo_souza/files/2009/12/2-Ordena%C3%A7%C3%A3o-HeapSort.pdf
void constroiHeap( int *p_vetor, int tamanho, int indice_raiz ){ int ramificacao, valor; valor = p_vetor[ indice_raiz ]; while(indice_raiz = p_vetor[ ramificacao ] ){//Identifica o max-heap break; }