Monday, December 18, 2006

JAVA : Estructura de Datos abstracta llamada Arbol. (Metodo Insertar y recorrido)
Los arboles son relativamente sencillos desde el punto de vista logico sin embargo todo comienza a ponerse interesante cuando pasas de los 15 valores. Nuestro objeto Dato debera contener un int x donde almacene el valor x (uh!), dos variables de tipo Dato( izq y der).
El funcionamiento del arbol es el siguiente: Este ingresa un objeto que tiene un valor x, ese valor x se posiciona en la variable raiz (que es tipo Dato ya que raiz hasta el momento era null) del arbol, posteriormente los demas objetos con valores x diferentes (mayores o menores) se iran acomodando de lado izq o der de nuestro objeto. (cada objeto tiene variable izq y der)
Los valores menores se iran a las variables izq y los valores mayores a la variable der.
Cada objeto a su vez tendra que realizar esta validación.Para insertar es necesario que nuestro metodo conozca si es mayor o menor, si es el primer objeto o si es uno de los ultimos de la rama.

Dato raiz;
public void insertar(Dato dat){
if(raiz==null){
raiz=dat;
}else{
for(Dato p=raiz;p!=null;){
if(dat.getNum()
if(p.izq==null){
p.izq=dat;
break;
}else
p=p.izq;
}else{
if(p.der==null){
p.der=dat;
break;
}else
p=p.der;
}
}
}
}

Cabe mencionar que estamos suponiendo que este metodo esta siendo insertado dentro de la clase(por eso que la variable raiz de tipo Dato la creamos fuera).
El metodo a su vez para eliminar tiene sus dificultades ya que si una rama contiene valores en sus variables izq o derecha esos valores no se pueden perder, sino que tienen que pasar a la rama anterior (el valor mayor) y el menor acomodarse en la rama izq libre del objeto anterior, asi mismo cuando deseamos eliminar el numero que esta en el objeto raiz.
Proximamente publicare el metodo eliminar, por lo mientras aqui esta el metodo recorrido, o impresion de los valores del arbol, este metodo utiliza la recursividad.

public void recorrido(Dato p){
if(p!=null){
recorrido(p.izq);
System.out.println(p.getNum());
recorrido(p.der);
}
}

No comments: