ayuda con arbol binario de busqueda

#1
Hola, he de programar una funcion que borre un nodo (memoria dinamica en Java),del cual me entra su valor por parametro, de un arbol binario de busqueda, el codigo que picado asta ahora es:

public void removeElement(Clau clave) throws PosicioInexistent{

int clau=Integer.parseInt(clave.toString());
boolean trobat=false;
if (this.numElements==0){
throw new PosicioInexistent("");
}else{
NodeABC<Clau, Elem> aux=this.inici;
NodeABC<Clau, Elem> aux2=null;
NodeABC<Clau, Elem> aux3=null;
NodeABC<Clau, Elem> aux4=null;
while((aux!=null)&&(trobat==false)){
if(aux.getLlave()!=clave){
if(Integer.parseInt(aux.getLlave().toString())>clau){
aux2=aux;
aux=aux.getEsq();

}else{
aux2=aux;
aux=aux.getDret();
}
}else{trobat=true;}
}
if(trobat==false){
throw new PosicioInexistent("");
}
else{


//si es la raiz if(Integer.parseInt(aux.getLlave().toString())==Integer.parseInt(this.inici.getLlave().toString())){

if((aux.getDret()!=null)&&(aux.getEsq()!=null)){
if((aux.getDret().getEsq()==null)&&(aux.getDret().getEsq()==null)){
aux2=aux.getDret();
aux2.setEsq(aux.getEsq());
this.inici=aux2;
aux=null;
}else{
aux2=aux.getDret();
while(aux2!=null){
aux4=aux3;
aux3=aux2;
aux2=aux2.getEsq();

}
if(aux3.getDret()!=null){
aux4.setEsq(aux3.getDret());
aux3.setDret(aux.getDret());
aux3.setEsq(aux.getEsq());
this.inici=aux3;
aux=null;
}else if(aux3.getEsq()!=null){
aux4.setEsq(null);
aux3.setDret(aux.getDret());
aux3.setEsq(aux.getEsq());
this.inici=aux3;
aux=null;
}
}
}else{
if((aux.getDret()!=null)&&(aux.getEsq()==null)){

this.inici=aux.getDret();
}
if((aux.getDret()==null)&&(aux.getEsq()!=null)){

this.inici=aux.getEsq();
}

}

}else{
System.out.println(aux2.getLlave()+"b");
if((aux.getDret()!=null)&&(aux.getEsq()!=null)){
NodeABC<Clau, Elem> aux5=null;
aux5=aux.getDret();
while(aux5!=null){
aux4=aux3;
aux3=aux5;
aux5=aux5.getEsq();

}
if(aux3.getDret()!=null){
aux4.setEsq(aux3.getDret());
aux3.setDret(aux.getDret());
aux3.setEsq(aux.getEsq());
if((Integer.parseInt(aux2.getDret().getLlave().toString())<(Integer.parseInt(aux.getLlave().toString())))){

aux2.setDret(aux3);
aux=null;
}
else{

aux2.setEsq(aux3);
aux=null;
}

}else{
aux4.setEsq(null);
aux3.setDret(aux.getDret());
aux3.setEsq(aux.getEsq());
if((Integer.parseInt(aux2.getDret().getLlave().toString())<(Integer.parseInt(aux.getLlave().toString())))){

aux2.setDret(aux3);
aux=null;
}
else{

aux2.setEsq(aux3);
aux=null;
}

}

}else{
if((aux.getDret()!=null)&&(aux.getEsq()==null)){

if((Integer.parseInt(aux2.getDret().getLlave().toString())<(Integer.parseInt(aux.getLlave().toString())))){

aux2.setDret(aux.getDret());
aux=null;
}
else{

aux2.setEsq(aux.getDret());
aux=null;
}
}else{
if((aux.getDret()==null)&&(aux.getEsq()!=null)){

if((Integer.parseInt(aux2.getDret().getLlave().toString())<(Integer.parseInt(aux.getLlave().toString())))){

aux2.setDret(aux.getEsq());
aux=null;
}
else{

aux2.setEsq(aux.getEsq());
aux=null;
}
}else{

if((aux.getDret()==null)&&(aux.getEsq()==null)){
System.out.println(aux2.getLlave()+"c");
if((Integer.parseInt(aux2.getDret().getLlave().toString())<(Integer.parseInt(aux.getLlave().toString())))){

aux2.setDret(null);
aux=null;
}
else{

aux2.setEsq(null);
aux=null;
}
}
}
}
}

}


}
this.numElements--;
}
}

Pero no funciona, ya no se que hacer, haver si alguien me puede ayudar a encontrar el error o los errores.

Gracias

P:eek: Esquerra significa izquierda en catalan y dreta Derecha, inici es inicio, si hay alguna palabra más por el codigo que no entadais me lo podeis preguntar. Disculpad las molestias.
 
Arriba