Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

ayuda con arbol binario de busqueda

maderogumi

Bovino adolescente
Desde
27 Dic 2008
Mensajes
53
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

PD: 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.
 
Volver
Arriba