Bom dia. pessoal... Tou com um pequeno problema. É o seguinte. Implementei um algoritmo que cria uma árvore alv (até aqui beleza), mas que em cada nó seja armazenada uma palavra e que quando insiro uma palavra que tenha a mesma primeira letra da que esta no nó, é criada uma lista encadeada. Mas o negócio ta aí. Quando insiro mais de duas palavras que tenham a mesma primeira letra, só imprime as duas ultimas palavras, parece que fica perdido a primeira palavra. E se eu inserir mais, só imprime as duas últimas. Vou colocar só a função de inserir. Se puderem me ajudar agradeceria muito.
void inserir(struct avl **pRaiz,struct avl **PAI, char info[]){
struct avl *atual;
struct avl *novo;
//struct avl *anterior;
if(*pRaiz == NULL){
*pRaiz = (struct avl *) malloc(sizeof(struct avl ));
(*pRaiz)->prox = NULL;
(*pRaiz)->esq = NULL;
(*pRaiz)->dir = NULL;
strcpy((*pRaiz)->info,info);
(*pRaiz)->chave = info[0];
(*pRaiz)->pai=(*PAI);
(*pRaiz)->bal=0;
return;
}
else{
if(info[0] <(*pRaiz)->chave){
inserir(& (*pRaiz)->esq,& (*pRaiz), info);
(*pRaiz)->bal=avl_height ( (*pRaiz)->dir ) - avl_height ( (*pRaiz)->esq );
if( (*pRaiz)->bal==-2){
if( (*pRaiz)->esq->bal==-1)
(*pRaiz)= rotacaoLL ( (*pRaiz) );
else if( (*pRaiz)->esq->bal==1){
(*pRaiz)->esq =rotacaoRR ( (*pRaiz)->esq );
(*pRaiz)= rotacaoLL ( (*pRaiz) );
}
}
}
else{
if(info[0] >(*pRaiz)->chave){
inserir(& (*pRaiz)->dir,& (*pRaiz), info);
(*pRaiz)->bal=avl_height ( (*pRaiz)->dir ) - avl_height ( (*pRaiz)->esq );
if( (*pRaiz)->bal==2){
if( (*pRaiz)->dir->bal==1)
(*pRaiz)= rotacaoRR ( (*pRaiz) );
else if( (*pRaiz)->dir->bal==-1){
(*pRaiz)->dir=rotacaoLL ( (*pRaiz)->dir);
(*pRaiz)= rotacaoRR ( (*pRaiz) );
}
}
}
}
if(info[0] == (*pRaiz)->chave){
novo = (struct avl *) malloc(sizeof(struct avl));
if (novo == NULL)
exit(0);
else{
novo->prox = NULL;
novo->esq = NULL;
novo->dir = NULL;
strcpy((novo)->info,info);
novo->chave = info[0];
novo->pai=(*PAI);
novo->bal=0;
atual = *pRaiz;
while(atual->prox != NULL){
atual = atual->prox;
}
atual->prox = novo;
*pRaiz = atual;
}
//novo->prox = atual;
//printf("(%d)%s\n",novo->bal, novo->info);
//system("pause");
//anterior->prox = novo;
//printf("(%d)%s\n",anterior->bal, anterior->info);
//system("pause");
//*pRaiz = atual;
return;
}
}
}