Ir ao conteúdo
  • Cadastre-se

Arvore Heap


maxiss

Posts recomendados

Função de eliminar elemento na arvore em C:

int EliminarElemArv( ArvBinInt *Raiz, int Elem )

{

  /*Ponteiros para uma estrutura do tipo ArvBinInt*/

  /* Actual é o nó que contem o elemento a apagar

  /* aApagar é o nó que vai ser libertado

  /* Filho éo filho do nó que vai ser libertado

  /* Pai é o pai do nó que vai ser libertado

  ArvBinInt Actual, aApagar, Filho, Pai;

  Actual = ProcurarElemArv( * Raiz , Elem );

  /* se ao nó actual falta pelo menos um filho é este o nó que vai ser libertado senão o nó a apagar é o seu sucessor*/ 

  if( Actual->Esq == NULL || Actual->Dir == NULL ) aApagar = Actual;

  else aApagar = SucessorArv( Actual ) ;

  /*o nó que se vai libertar tem, no máximo, um filho: o esquerdo ou o direito*/

  if( Actual->Esq != NULL) Filho  = aApagar->Esq;

  else Filho = aApagar->dir;

  /*por Pai considera-se o Pai do nó a libertar( se for a raiz é NULL) se houver um Filho actualiza-se o ponteiro Pai deste*/

  Pai = aApagar->Pai;

  if( Filho != NULL) Filho->Pai = Pai;

 

  /*se é NULL é porque se vai apagar a raiz, logo actualiza-se a raiz.*/

if( Pai == NULL ) *Raiz = Filho;

 

  /*se não for tem-se de ver se o nó a libertar é o filho direito ou esqeurdo, para se actualizar o respectivo ponteiro, isto é, actualizar o novo filho direito ou esquerdo*/

else if( Pai->Esq == aApagar ) Pai->Esq = Filho;

        else Pai->Dir = Filho;

 

  /*se o nó a libertar e o nó que continha o elemento forem diferentes é necessário copiar o contreudo do no a libertar para o nó que continha o elemento*/

  if ( aApagar != Actual )

    Actual->oElem = aApagar->oElem;

 

  /*apaga-se o elemento*/

free( aApagar);

}

Agora vou fazer o inserir elemento se tiver alguma duvida posta ai

Link para o comentário
Compartilhar em outros sites

Função inserir elemento numa arvore binaria recursivamente

int InsereElemArv( ArvBinInt *Raiz, int novoElem )

{

  if( *Raiz != NULL )

  {

    if( Elem > *Raiz->oelem && Raiz->Dir != NULL )

        return InsereElemArv( &(*Raiz->Dir), novoElem );

    if( Elem <= *Raiz->oElem && Raiz->Esq!=NULL)

        return InsereElemArv( &(*Raiz->Dir), novoElem );

  }

  /*inserir o no*/

ArvbinInt novoNo = CriarNoArv( novoElem );

  if( novoNo == NULL ) return 0;

 

  if( *Raiz == NULL )

    *Raiz = novoNo;

  else

    if (elem > *Raiz->Elem ) *Raiz->Dir = novoNo;

    else *Raiz->Esq = novoNo;

  novoNo->Pai = *Raiz;

  return 1;

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...