This commit is contained in:
Max do Val Machado 2021-05-10 13:27:43 -03:00
parent 4281f06b0a
commit a7e52043da
3 changed files with 3 additions and 64 deletions

View File

@ -198,61 +198,3 @@ void maiorEsq(No** i, No** j) {
free(del);
}
}
/**
* Metodo publico iterativo para remover elemento.
* @param x Elemento a ser removido.
*/
void removerSucessor(int x) {
removerRecSucessor(x, &raiz);
}
/**
* Metodo privado recursivo para remover elemento.
* @param x Elemento a ser removido.
* @param i No** endereco do ponteiro No
*/
void removerRecSucessor(int x, No** i) {
if (*i == NULL) {
errx(1, "Erro ao remover!");
} else if (x < (*i)->elemento) {
removerRec(x, &((*i)->esq));
} else if (x > (*i)->elemento) {
removerRec(x, &((*i)->dir));
} else if ((*i)->dir == NULL) {
No* del = *i;
*i = (*i)->esq;
free(del);
} else if ((*i)->esq == NULL) {
No* del = *i;
*i = (*i)->dir;
free(del);
} else {
maiorEsq(i, &((*i)->dir));
}
}
/**
* Metodo para trocar no removido pelo maior elemento da esquerda.
* @param i No** endereco do ponteiro No que contem o elemento removido.
* @param j No** endereco do ponteiro No da subarvore esquerda.
*/
void maiorEsq(No** i, No** j) {
// Encontrou o maximo da subarvore esquerda.
if ((*j)->dir == NULL) {
No* del = *j;
(*i)->elemento = (*j)->elemento; // Substitui i por j.
(*j) = (*j)->esq; // Substitui j por j.ESQ.
free(del);
// Existe no a direita.
} else {
maiorEsq(i, &((*j)->dir)); // Caminha para direita.
}
}

View File

@ -14,9 +14,7 @@ void caminharPreRec(No*);
void caminharPosRec(No*);
void inserirRec(int, No**);
void removerRec(int, No**);
void antecessor(No**, No**);
void removerRecSucessor(int, No**);
void sucessor(No**, No**);
void maiorEsq(No**, No**);
void start();
bool pesquisar(int);
@ -25,4 +23,3 @@ void caminharPre();
void caminharPos();
void inserir(int);
void remover(int);
void removerSucessor(int);

View File

@ -46,10 +46,10 @@ int main(){
printf("\nVoltando com a árvore inicial");
printf("\nRemover: 3");
printf("\nCaminhar: central, pre e pos\n");
removerSucessor(2);
remover(2);
inserir(1);
inserir(2);
removerSucessor(3);
remover(3);
caminharCentral();
caminharPre();