Arbol binario en jcreator, podrian ayudarme
A me indica que la clase derivada de la clase abstracta CArbolBinB (¿tengo qué hacer el
código en otro archivo pero en el mismo proyecto en jcreator?) . Gracias
Necesito probar el código supongo con un demo podrías ayudarme por javor
===============================================================
public abstract class CArbolBinB
{
protected CNodo raiz = null;
private class CNodo
{
private Object datos;
private CNodo izquierdo;
private CNodo derecho;
public CNodo() {}
}
public static final int CORRECTO = 000;
public static final int NO_DATOS = 100;
public static final int YA_EXISTE = 101;
public static final int NO_EXISTE = 102;
public CArbolBinB () {}
public abstract int comparar(Object obj1, Object obj2);
public abstract void procesar(Object obj);
public abstract void visitarInorden();
public abstract void visitarPosorden();
public abstract void visitarPreorden();
public Object buscar(Object obj)
{
CNodo actual = raiz;
int nComp=0;
while(actual!=null)
{
if((nComp=comparar(obj, actual.datos))==0)
return(actual.datos);
else if(nComp<0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
return null;
}
public int insertar(Object obj)
{
CNodo ultimo=null, actual=raiz;
int nComp=0;
if (obj == null) return NO_DATOS;
while(actual!=null)
{
if ((nComp = comparar(obj, actual.datos))==0)
break;
else
{
ultimo = actual;
if (nComp < 0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
}
if (actual ==null)
{
CNodo nuevoNodo=new CNodo();
nuevoNodo.datos=obj;
nuevoNodo.izquierdo=nuevoNodo.derecho=null;
if(ultimo==null)
raiz = nuevoNodo;
else if (nComp<0)
ultimo.izquierdo = nuevoNodo;
else
ultimo.derecho = nuevoNodo;
return CORRECTO;
}
else
return YA_EXISTE;
}
public Object borrar(Object obj)
{
CNodo ultimo=null,actual=raiz;
CNodo marcado=null,sucesor=null;
int nAnteriorComp=0, nComp = 0;
if(obj==null) return null;
while(actual!=null)
{
nAnteriorComp=nComp;
if((nComp=comparar(obj,actual.datos))==0)
break;
else
{
ultimo = actual;
if(nComp < 0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
}
if (actual!=null)
{
marcado = actual;
if((actual.izquierdo==null && actual.derecho==null))
sucesor=null;
else if(actual.izquierdo==null)
sucesor=actual.derecho;
else if(actual.derecho==null)
sucesor=actual.izquierdo;
else
{
sucesor=actual=actual.derecho;
while(actual.izquierdo!=null)
actual=actual.izquierdo;
actual.izquierdo=marcado.izquierdo;
}
if(ultimo!= null)
{
if(nAnteriorComp<0)
ultimo.izquierdo = sucesor;
else
ultimo.derecho = sucesor;
}
else
raiz = sucesor;
return marcado.datos;
}
else
return null;
}
public void inorden(CNodo r, boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
inorden(actual.izquierdo,false);
procesar(actual.datos);
inorden(actual.derecho,false);
}
}
public void preorden(CNodo r,boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
procesar(actual.datos);
preorden(actual.izquierdo, false );
preorden(actual.derecho,false);
}
}
public void posorden(CNodo r,boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
posorden(actual.izquierdo,false);
posorden(actual.derecho,false);
procesar(actual.datos);
}
}
}
=====================================================
public class CArbolBinarioDeBusqueda extends CArbolBinB
{
public int comparar(Object obj1, Object obj2)
{
String str1 = new String(((CDatos)obj1).obtenerNombre());
String str2 = new String(((CDatos)obj2).obtenerNombre());
return str1.compareTo(str2);
}
public void procesar (Object obj)
{
String nombre = new String(((CDatos)obj).obtenerNombre());
double nota = ((CDatos)obj).obtenerNota();
System.out.println(nombre + " " + nota);
}
public void visitarInorden()
{
inorden(null, true);
}
public void visitarPosorden()
{
posorden(null, true);
}
public void visitarPreorden()
{
preorden(null, true);
}
}
===================================================
public class CDatos
{
private String nombre;
private double nota;
public CDatos(){}
public CDatos(String nom,double n)
{
nombre = nom;
nota = n;
}
public void asignarNombre(String nom)
{
nombre = nom;
}
public String obtenerNombre()
{
return nombre;
}
public void asignarNota(double n)
{
nota = n;
}
public double obtenerNota()
{
return nota;
}
}
================================================
public class Test
{
public static void main(String[] args)
{
CArbolBinarioDeBusqueda arbolbb=new CArbolBinarioDeBusqueda();
String nombre;
double nota;
int i=0,cod;
System.out.println("Introducir datos. Finalizar con Ctrl+z.");
System.out.print("nombre: ");
while ((nombre = Leer.dato())!= null)
{
System.out.print("nota: ");
nota = Leer.datoDouble();
cod=arbolbb.insertar(new CDatos(nombre,nota));
if (cod == CArbolBinarioDeBusqueda.YA_EXISTE)
{
CDatos datos = (CDatos)arbolbb.buscar(new CDatos(nombre,nota));
if (nota>=0)
datos.asignarNota(nota);
else
{
if (arbolbb.borrar(new CDatos(nombre,nota))==null)
System.out.println("no borrado porque no existe");
else
System.out.println("nodo borrado");
}
}
System.out.print("nombre: ");
}
System.out.println("\n");
System.out.println("\nArbol Inorden:");
arbolbb.visitarInorden();
System.out.println("\nArbol posorden:");
arbolbb.visitarPosorden();
System.out.println("\nArbol preorden:");
arbolbb.visitarPreorden();
}
}
código en otro archivo pero en el mismo proyecto en jcreator?) . Gracias
Necesito probar el código supongo con un demo podrías ayudarme por javor
===============================================================
public abstract class CArbolBinB
{
protected CNodo raiz = null;
private class CNodo
{
private Object datos;
private CNodo izquierdo;
private CNodo derecho;
public CNodo() {}
}
public static final int CORRECTO = 000;
public static final int NO_DATOS = 100;
public static final int YA_EXISTE = 101;
public static final int NO_EXISTE = 102;
public CArbolBinB () {}
public abstract int comparar(Object obj1, Object obj2);
public abstract void procesar(Object obj);
public abstract void visitarInorden();
public abstract void visitarPosorden();
public abstract void visitarPreorden();
public Object buscar(Object obj)
{
CNodo actual = raiz;
int nComp=0;
while(actual!=null)
{
if((nComp=comparar(obj, actual.datos))==0)
return(actual.datos);
else if(nComp<0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
return null;
}
public int insertar(Object obj)
{
CNodo ultimo=null, actual=raiz;
int nComp=0;
if (obj == null) return NO_DATOS;
while(actual!=null)
{
if ((nComp = comparar(obj, actual.datos))==0)
break;
else
{
ultimo = actual;
if (nComp < 0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
}
if (actual ==null)
{
CNodo nuevoNodo=new CNodo();
nuevoNodo.datos=obj;
nuevoNodo.izquierdo=nuevoNodo.derecho=null;
if(ultimo==null)
raiz = nuevoNodo;
else if (nComp<0)
ultimo.izquierdo = nuevoNodo;
else
ultimo.derecho = nuevoNodo;
return CORRECTO;
}
else
return YA_EXISTE;
}
public Object borrar(Object obj)
{
CNodo ultimo=null,actual=raiz;
CNodo marcado=null,sucesor=null;
int nAnteriorComp=0, nComp = 0;
if(obj==null) return null;
while(actual!=null)
{
nAnteriorComp=nComp;
if((nComp=comparar(obj,actual.datos))==0)
break;
else
{
ultimo = actual;
if(nComp < 0)
actual = actual.izquierdo;
else
actual = actual.derecho;
}
}
if (actual!=null)
{
marcado = actual;
if((actual.izquierdo==null && actual.derecho==null))
sucesor=null;
else if(actual.izquierdo==null)
sucesor=actual.derecho;
else if(actual.derecho==null)
sucesor=actual.izquierdo;
else
{
sucesor=actual=actual.derecho;
while(actual.izquierdo!=null)
actual=actual.izquierdo;
actual.izquierdo=marcado.izquierdo;
}
if(ultimo!= null)
{
if(nAnteriorComp<0)
ultimo.izquierdo = sucesor;
else
ultimo.derecho = sucesor;
}
else
raiz = sucesor;
return marcado.datos;
}
else
return null;
}
public void inorden(CNodo r, boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
inorden(actual.izquierdo,false);
procesar(actual.datos);
inorden(actual.derecho,false);
}
}
public void preorden(CNodo r,boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
procesar(actual.datos);
preorden(actual.izquierdo, false );
preorden(actual.derecho,false);
}
}
public void posorden(CNodo r,boolean nodoRaiz)
{
CNodo actual=null;
if(nodoRaiz)
actual=raiz;
else
actual=r;
if(actual!=null)
{
posorden(actual.izquierdo,false);
posorden(actual.derecho,false);
procesar(actual.datos);
}
}
}
=====================================================
public class CArbolBinarioDeBusqueda extends CArbolBinB
{
public int comparar(Object obj1, Object obj2)
{
String str1 = new String(((CDatos)obj1).obtenerNombre());
String str2 = new String(((CDatos)obj2).obtenerNombre());
return str1.compareTo(str2);
}
public void procesar (Object obj)
{
String nombre = new String(((CDatos)obj).obtenerNombre());
double nota = ((CDatos)obj).obtenerNota();
System.out.println(nombre + " " + nota);
}
public void visitarInorden()
{
inorden(null, true);
}
public void visitarPosorden()
{
posorden(null, true);
}
public void visitarPreorden()
{
preorden(null, true);
}
}
===================================================
public class CDatos
{
private String nombre;
private double nota;
public CDatos(){}
public CDatos(String nom,double n)
{
nombre = nom;
nota = n;
}
public void asignarNombre(String nom)
{
nombre = nom;
}
public String obtenerNombre()
{
return nombre;
}
public void asignarNota(double n)
{
nota = n;
}
public double obtenerNota()
{
return nota;
}
}
================================================
public class Test
{
public static void main(String[] args)
{
CArbolBinarioDeBusqueda arbolbb=new CArbolBinarioDeBusqueda();
String nombre;
double nota;
int i=0,cod;
System.out.println("Introducir datos. Finalizar con Ctrl+z.");
System.out.print("nombre: ");
while ((nombre = Leer.dato())!= null)
{
System.out.print("nota: ");
nota = Leer.datoDouble();
cod=arbolbb.insertar(new CDatos(nombre,nota));
if (cod == CArbolBinarioDeBusqueda.YA_EXISTE)
{
CDatos datos = (CDatos)arbolbb.buscar(new CDatos(nombre,nota));
if (nota>=0)
datos.asignarNota(nota);
else
{
if (arbolbb.borrar(new CDatos(nombre,nota))==null)
System.out.println("no borrado porque no existe");
else
System.out.println("nodo borrado");
}
}
System.out.print("nombre: ");
}
System.out.println("\n");
System.out.println("\nArbol Inorden:");
arbolbb.visitarInorden();
System.out.println("\nArbol posorden:");
arbolbb.visitarPosorden();
System.out.println("\nArbol preorden:");
arbolbb.visitarPreorden();
}
}
1 Respuesta
Respuesta de jruben