void IRetira(TipoReg x, TipoApont *Ap, short *Fim) { TipoNo *Aux; if (*Ap == NULL) { printf("Chave nao esta na arvore\n"); *Fim = TRUE; return; } //COMPARA플O AQUI if (x.Chave < (*Ap)->Reg.Chave) { IRetira(x, &(*Ap)->Esq, Fim); if (!*Fim) EsqCurto(Ap, Fim); return; }//COMPARA플O AQUI if (x.Chave > (*Ap)->Reg.Chave) { IRetira(x, &(*Ap)->Dir, Fim); if (!*Fim) DirCurto(Ap, Fim); return; } *Fim = FALSE; Aux = *Ap; if (Aux->Dir == NULL) { *Ap = Aux->Esq; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } if (Aux->Esq == NULL) { *Ap = Aux->Dir; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } Antecessor(Aux, &Aux->Esq, Fim); if (!*Fim) EsqCurto(Ap, Fim); /* Encontrou chave */ }
void IRetiraSBB (TipoItem x, ApontadorNo *Ap, short *Fim){ No *Aux; if (Ap == NULL){ head(); printf ("\n\n\tNumero de inscricao invalido!"); *Fim = TRUE; getch(); return; } if (x.Matricula > (*Ap)->Item.Matricula){ IRetiraSBB (x, &(*Ap)->Dir, Fim); if (!*Fim) DirCurto(Ap, Fim); return; } *Fim = FALSE; Aux = *Ap; if (Aux->Dir == NULL){ *Ap = Aux->Esq; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } if (Aux->Esq == NULL) { *Ap = Aux->Dir; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } Antecessor(Aux, &Aux->Esq, Fim); if (!*Fim) EsqCurto(Ap, Fim); //Encontrou a chave }
void IRetira(TipoItem x, ApontadorNo *Ap, short *Fim) { No *Aux; if (*Ap == NULL) { system("color 4f"); printf("\n\n\t Codigo invalido ou inexistente. \n"); system("pause"); system("color 0f"); *Fim = TRUE; return; } if (x.cod < (*Ap)->Reg.cod) { IRetira(x, &(*Ap)->Esq, Fim); if (!*Fim) EsqCurto(Ap, Fim); return; } if (x.cod > (*Ap)->Reg.cod) { IRetira(x, &(*Ap)->Dir, Fim); if (!*Fim) DirCurto(Ap, Fim); return; } *Fim = FALSE; Aux = *Ap; if (Aux->Dir == NULL) { *Ap = Aux->Esq; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } if (Aux->Esq == NULL) { *Ap = Aux->Dir; free(Aux); if (*Ap != NULL) *Fim = TRUE; return; } Antecessor(Aux, &Aux->Esq, Fim); if (!*Fim) EsqCurto(Ap, Fim); /* Encontrou chave */ }