update
This commit is contained in:
parent
4281f06b0a
commit
a7e52043da
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue