Pesquisar na Comunidade
Mostrando resultados para as tags ''avl''.
Encontrado 1 registro
-
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; } } }
- 2 respostas
-
- avl
- lista encadeada
-
(e %d mais)
Tags: