Ir para conteúdo
Fórum Script Brasil
  • 0

problema de segmentation fault em AVL


chris~

Pergunta

eu tenho isso em um arquivo .h
porem a hora q eu rodo ele insere 2 chaves, e depois da falha de segmentação

não sei mais o que fazer para resolver, sera que alguém poderia me ajudar?

struct arvoreBinAVL {
   unsigned long int chave;
   struct arvoreBinAVL *esq;
   struct arvoreBinAVL *dir;
   short int fb;
};
typedef struct arvoreBinAVL NoArvBinAVL;
 
NoArvBinAVL **rotacaoDir(NoArvBinAVL **y);
NoArvBinAVL **rotacaoEsq(NoArvBinAVL **y);
NoArvBinAVL **rotacaoEsqDir(NoArvBinAVL **y);
NoArvBinAVL **rotacaoDirEsq(NoArvBinAVL **y);
 
NoArvBinAVL *buscaNoArvBinAVL(NoArvBinAVL **r, unsigned long int k) {
    if(*r == NULL) return NULL;
    if ((*r)->chave == k)
       return *r;
    if ((*r)->chave > k){
     return buscaNoArvBinAVL(&(*r)->esq, k);
    }
    else
     return buscaNoArvBinAVL(&(*r)->dir, k);
}
 
void insereNoArvBinAVL(NoArvBinAVL **r, unsigned long int k) {  
    if ((*r) == NULL){
(*r) = malloc(sizeof(NoArvBinAVL));
if((*r) == NULL) return;
(*r)->chave = k;
(*r)->esq = NULL;
(*r)->dir = NULL;
(*r)->fb = 0;
return;
    }
    if((*r)->chave > k){
insereNoArvBinAVL(&(*r)->esq, k);
     (*r)->fb -= 1;
if((*r)->fb == 0 || (*r)->fb == 1 || (*r)->fb == -1){
return;
}
if((*r)->fb == 2){
if(((*r)->esq)->fb == 1){
r = rotacaoEsq(r);
return;
}
else if(((*r)->esq)->fb == 0){
r = rotacaoEsq(r);
return;
}
else{
r = rotacaoDirEsq(r);
return;
}
}
else{
if(((*r)->esq)->fb == 1){
r = rotacaoEsqDir(r);
return;
}
else if(((*r)->esq)->fb == 0){
r = rotacaoDir(r);
return;
}
else{
r = rotacaoDir(r);
return;
}
}
}
    else{
     insereNoArvBinAVL(&(*r)->dir, k);
(*r)->fb += 1;
if((*r)->fb == 0 || (*r)->fb == 1 || (*r)->fb == -1){
return;
}
else if((*r)->fb == 2){
if(((*r)->dir)->fb == 1){
r = rotacaoEsq(r);
return;
}
else if(((*r)->dir)->fb == 0){
r = rotacaoEsq(r);
return;
}
else{
r = rotacaoEsqDir(r);
return;
}
}
else{
if(((*r)->dir)->fb == 1){
r = rotacaoEsqDir(r);
return;
}
else if(((*r)->dir)->fb == 0){
r = rotacaoDir(r);
return;
}
else{
r = rotacaoDir(r);
return;
}
}
 
}
}
 
NoArvBinAVL **rotacaoEsq(NoArvBinAVL **y){
NoArvBinAVL *x = (*y)->dir;
(*y)->dir = x->esq;
x->esq = *y;
*y = x;
return y;
}
 
NoArvBinAVL **rotacaoDir(NoArvBinAVL **y){
NoArvBinAVL *x = (*y)->esq;
(*y)->esq = x->dir;
x->dir = *y;
*y = x;
return y;
}
 
NoArvBinAVL **rotacaoEsqDir(NoArvBinAVL **y){
y = rotacaoDir(&((*y)->esq));
return rotacaoEsq(&(*y));
}
 
NoArvBinAVL **rotacaoDirEsq(NoArvBinAVL **y){
y = rotacaoEsq(&((*y)->dir));
return rotacaoDir(&(*y));
}  
Editado por chris~
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...