Olá estou implementando uma arvore AVL e estou tendo alguns problemas no método remover quando eu vou remover um no que possui dois filhos o no que eu quero remover ele é substituído pelo seu no filho da esquerda, Já quando eu vou remover um no folha(que não tem filhos) não acontece nada.
Exemplo: remover no 10 na seguinte arvore:
resultado:
ele apenas repete o do no da esquerda e quando é um no folha não acontece nada. se alguém puder me ajuda obrigado desde já.
quase esquecendo… esse é meu codigo de remover:
public boolean remover(int x) {
if (raiz == null)
return false;
else {
if (raiz.key == x) {
AvlNo auxRaiz = new AvlNo(0);
auxRaiz.esq = raiz;
boolean result = removerAVL(auxRaiz, x, procurarpai(x));
raiz = auxRaiz.esq;
return result;
} else {
return removerAVL(raiz, x, procurarpai(x));
}
}
}
public int procurarMenor(AvlNo atual) {
if (atual.esq == null)
return atual.key;
else
return procurarMenor(atual.esq);
}
public boolean removerAVL(AvlNo atual, int x, AvlNo pai) {
if (x < atual.key) {
if (atual.esq != null)
return removerAVL(atual.esq, x, pai);
else
return false;
} else if (x > atual.key) {
if (atual.dir != null)
return removerAVL(atual.dir, x, pai);
else
return false;
} else {
if (atual.esq != null && atual.dir != null) {
atual.key = procurarMenor(atual);
removerAVL(atual.dir, atual.key, pai);
} else if (pai.esq == atual.esq) {
pai.esq = (atual.esq != null) ? atual.esq : atual.dir;
} else if (pai.dir == atual.dir) {
pai.dir = (atual.esq != null) ? atual.esq : atual.dir;
}
return true;
}
}