Ao desenvolver uma estrutura de Dados do tipo Árvore Binária, não consigo efetuar a remoção quando o nó não possui esquerda nem direita. Isso é claro, na segunda operação, na primeira funciona quando faço:
Você pode postar o resto da sua implementação da árvore? Pelo seu código tá difícil de identificar o problema
Phelp_s
:roll:
greg10
ta ai o metodo e seus derivados....
publicstaticvoidRemove(){if(A!=null){intx=Integer.parseInt(JOptionPane.showInputDialog(null,"Informe o Código do cadastro a ser removido"));noaux=A;while(aux!=null&&x!=aux.codigo){if(x<aux.codigo)aux=aux.esq;elseaux=aux.dir;}if(aux==null)JOptionPane.showMessageDialog(null,"Código não localizado","Remoção",JOptionPane.ERROR_MESSAGE);else{noant=A;noP=A;aux=A;while(aux!=null&&x!=aux.codigo){if(x<aux.codigo){ant=aux;P=aux.esq;aux=aux.esq;}else{ant=aux;P=aux.dir;aux=aux.dir;}}if(aux.esq==null&&aux.dir==null)Remove_folha(ant,x);if(aux.esq!=null&&aux.dir==null)Remove_Esq(ant,P,x);if(aux.esq==null&&aux.dir!=null)Remove_Dir(ant,P,x);if(aux.esq!=null&&aux.dir!=null){nomaior=A.esq;noanterior=maior;while(maior.dir!=null){anterior=maior;maior=maior.dir;}aux.codigo=maior.codigo;aux.Nome=maior.Nome;aux.CPF=maior.CPF;if(maior.esq==null&&maior.dir==null)Remove_folha(aux,maior.codigo);elseRemove_Esq(aux,P,maior.codigo);}JOptionPane.showMessageDialog(null,"Cadastro Removido com sucesso!!","Remoção",JOptionPane.INFORMATION_MESSAGE);}}elseJOptionPane.showMessageDialog(null,"Não existe elementos para excluir!","Exclusão",JOptionPane.ERROR_MESSAGE);}
aqui é o removedor de nós recursivo
public static void Remove_folha(no ant, int x){
if(ant.esq == null && ant.dir == null)
A = null;
else if(ant.esq != null && x == ant.esq.codigo)
ant.esq = null;
else
ant.dir = null;
}
/*Método que remove o nó que possui apenas
* informação à sua direita.
*/
public static void Remove_Dir(no ant, no P, int x){
if(x > ant.codigo)
ant.dir = P.dir;
else
ant.esq = P.dir;
}
/*Método que remove o nó que contém somente informações
* a sua esquerda.
*/
public static void Remove_Esq(no ant, no P, int x){
if(x > ant.codigo)
ant.dir = P.esq;
else
ant.esq = P.esq;
}