update
This commit is contained in:
parent
4281f06b0a
commit
a7e52043da
|
|
@ -198,61 +198,3 @@ void maiorEsq(No** i, No** j) {
|
||||||
free(del);
|
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 caminharPosRec(No*);
|
||||||
void inserirRec(int, No**);
|
void inserirRec(int, No**);
|
||||||
void removerRec(int, No**);
|
void removerRec(int, No**);
|
||||||
void antecessor(No**, No**);
|
void maiorEsq(No**, No**);
|
||||||
void removerRecSucessor(int, No**);
|
|
||||||
void sucessor(No**, No**);
|
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
bool pesquisar(int);
|
bool pesquisar(int);
|
||||||
|
|
@ -25,4 +23,3 @@ void caminharPre();
|
||||||
void caminharPos();
|
void caminharPos();
|
||||||
void inserir(int);
|
void inserir(int);
|
||||||
void remover(int);
|
void remover(int);
|
||||||
void removerSucessor(int);
|
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,10 @@ int main(){
|
||||||
printf("\nVoltando com a árvore inicial");
|
printf("\nVoltando com a árvore inicial");
|
||||||
printf("\nRemover: 3");
|
printf("\nRemover: 3");
|
||||||
printf("\nCaminhar: central, pre e pos\n");
|
printf("\nCaminhar: central, pre e pos\n");
|
||||||
removerSucessor(2);
|
remover(2);
|
||||||
inserir(1);
|
inserir(1);
|
||||||
inserir(2);
|
inserir(2);
|
||||||
removerSucessor(3);
|
remover(3);
|
||||||
|
|
||||||
caminharCentral();
|
caminharCentral();
|
||||||
caminharPre();
|
caminharPre();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue