
Enviado em 03/12/2012 - 18:52h
Olá colegas, estou tentando implementar a função remover na árvore binária, escrevi até a logica, mas rodar que é bom nada...rsrsrr. Gostaria da ajuda de vocês, para saber no que estou errando.void remover (int x){
t_node *retira; // variavel para o nó a ser retirado
t_node *aux;// variavel para pegar raiz
t_node *pai;//variavel para pegar o pai do nó retirado
t_node *aux2;//filho apontando pro NULL pela esquerda(ant) ou direita(prox), para substituir o valor retirado
t_node *aux3;//anterior a aux2, criado para que o ponteiro que apontava pro aux2(substituto) va para o NULL
aux = raiz;// igualando o aux à raiz para começar a busca
retira->chave = x;// atribuindo o qual quero retirar
if(raiz == NULL){
printf("erro");
}
else{
int removeu = 0; // variavel para criar a repetição
while (removeu==0){//começa a busca pelo valor a ser retirado na arvore
if(retira->chave > aux->chave){ // se o numero posto maior que aux
if(aux->prox != NULL){// "if" para achar o valor sempre guardando o nó anterior
pai=aux;
aux= (t_node *)aux->prox;
}
else{
if(retira->chave = aux->chave){ // apos achar valor, procurar valor mais a esquerda para servir de substituto
if(aux->ant != NULL){
aux3=aux;
aux= (t_node *)aux->ant;
aux2=aux;
}
else{//após ter achado, pegar o ponteiro da direita e apontar para o substituto
pai->prox = aux2;
aux3->ant = NULL;//apontando para o NULL, aquele que apontava para o substituto
removeu=1;// saindo do WHILE
}
}
else{
printf("erro");
}
}
}
else{// mesma função citada acima, só que se a chave for menor que a raiz
if(retira->chave < aux->chave){
if(aux->ant != NULL){
pai=aux;
aux= (t_node *)aux->ant;
}
else{
if(retira->chave = aux->chave){
if(aux->prox != NULL){
aux3=aux;
aux=(t_node *)aux->prox;
aux2=aux;
}
else{
pai->ant = aux2;
aux3->prox = NULL;
removeu=1;
}
}
}
}
}
}
}
} Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Consertando o áudio com som ruim no Pipewire
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (2)
Como programar um sistema de controle para distribuições linux em c? (3)









