Java - arbol B* en java

 
Vista:

arbol B* en java

Publicado por MemoValencia (1 intervención) el 08/12/2007 02:47:10
hola a todos!!... necesito de su ayuda, ojala pudieran apoyarme proporcionandome codigo en java para un arbol B*, que permita agregar datos, quitar, buscar, etc.
Gracias de antemano!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:arbol B* en java

Publicado por ascari romo (36 intervenciones) el 08/12/2007 02:53:21
Espero que le sirva amigo:


public class ArbolBinarioBusqueda{
private NodoArbolBinario nodoRaiz;

public ArbolBinarioBusqueda(){
nodoRaiz = null;
}

public void insertar(int iElemento){
if(nodoRaiz == null) //Árbol vacío
nodoRaiz = new NodoArbolBinario(iElemento);
else
nodoRaiz.insertar(iElemento);
}

public NodoArbolBinario buscar(int iElemento){
return buscar(iElemento, nodoRaiz);
}

private NodoArbolBinario buscar(int iElemento, NodoArbolBinario nodo){
int iNivel = 1;
while(nodo != null){
if(iElemento < nodo.dato)
nodo = nodo.nodoIzquierdo;
else if(iElemento > nodo.dato)
nodo = nodo.nodoDerecho;
else{ //Encontramos el elemento
System.out.println(iElemento+" encontrado en el nivel "+iNivel);
return nodo;
}
iNivel++;
}
System.out.println(iElemento+" no encontrado");
return null; //Elemento no encontrado
}

public void eliminar(int iElemento){
nodoRaiz = eliminar(iElemento, nodoRaiz);
}

public NodoArbolBinario eliminar(int iElemento, NodoArbolBinario nodo){
if(nodo == null){
System.out.println(iElemento+" no encontrado");
return null;
}
if(iElemento < nodo.dato)
nodo.nodoIzquierdo = eliminar(iElemento, nodo.nodoIzquierdo);
else if(iElemento > nodo.dato)
nodo.nodoDerecho = eliminar(iElemento, nodo.nodoDerecho);
else if(nodo.nodoIzquierdo != null && nodo.nodoDerecho != null){ //Dos hijos
nodo.dato = nodoMin(nodo.nodoDerecho).dato;
nodo.nodoDerecho = eliminarMin(nodo.nodoDerecho);
}else{ //Un hijo
if(nodo.nodoIzquierdo != null)
nodo = nodo.nodoIzquierdo;
else
nodo = nodo.nodoDerecho;
}
return nodo;
}

private NodoArbolBinario eliminarMin(NodoArbolBinario nodo){
if(nodo == null) return null;
if(nodo.nodoIzquierdo != null)
nodo.nodoIzquierdo = eliminarMin(nodo.nodoIzquierdo);
else //No hay nodo izquierdo, el padre será el nodo derecho
nodo = nodo.nodoDerecho;
return nodo;
}

public NodoArbolBinario nodoMin(NodoArbolBinario nodo){
if(nodo == null) return null;
while(nodo.nodoIzquierdo != null)
nodo = nodo.nodoIzquierdo;
return nodo;
}

public NodoArbolBinario nodoMax(NodoArbolBinario nodo){
if(nodo == null) return null;
while(nodo.nodoDerecho != null)
nodo = nodo.nodoDerecho;
return nodo;
}

public void recorridoPreorden(){
ayudantePreorden(nodoRaiz);
}

private void ayudantePreorden(NodoArbolBinario nodo){
if(nodo == null)
return;
System.out.print(nodo.dato + " " );
ayudantePreorden(nodo.nodoIzquierdo );
ayudantePreorden(nodo.nodoDerecho );
}

public void recorridoInorden(){
ayudanteInorden(nodoRaiz);
}

private void ayudanteInorden(NodoArbolBinario nodo){
if(nodo == null)
return;
ayudanteInorden(nodo.nodoIzquierdo);
System.out.print(nodo.dato + " " );
ayudanteInorden(nodo.nodoDerecho);
}

public void recorridoPostorden(){
ayudantePostorden(nodoRaiz);
}

private void ayudantePostorden(NodoArbolBinario nodo){
if(nodo == null)
return;
ayudantePostorden(nodo.nodoIzquierdo);
ayudantePostorden(nodo.nodoDerecho);
System.out.print(nodo.dato + " " );
}

public void imprimir(){
imprimir(nodoRaiz, 0);
}

private void imprimir(NodoArbolBinario nodo, int iAltura){
char c[] = new char[iAltura];
for(int i = 0; i < c.length; i++)
c[i] = '-';
if(nodo == null) return;
System.out.println(new String(c) + nodo.dato);
iAltura++;
imprimir(nodo.nodoIzquierdo, iAltura);
imprimir(nodo.nodoDerecho, iAltura);
}

public boolean estaVacio(){
return nodoRaiz == null;
}

public void vaciar(){
nodoRaiz = null;
}
}

class NodoArbolBinario{
public NodoArbolBinario nodoIzquierdo;
public NodoArbolBinario nodoDerecho;
public int dato;

public NodoArbolBinario(int dato) {
this.dato = dato;
nodoIzquierdo = nodoDerecho = null;
}

public synchronized void insertar(int iElemento){
if(iElemento < dato ) {//Insertar en subárbol izquierdo
//Insertar nuevo NodoArbolBinario
if(nodoIzquierdo == null)
nodoIzquierdo = new NodoArbolBinario(iElemento);
else //Continuar recorriendo subárbol izquierdo
nodoIzquierdo.insertar(iElemento);
}else if(iElemento > dato){//Insertar en subárbol derecho
//Insertar nuevo NodoArbolBinario
if(nodoDerecho == null)
nodoDerecho = new NodoArbolBinario( iElemento );
else //Continuar recorriendo subárbol derecho
nodoDerecho.insertar(iElemento);
}
}
}

Y LUEGO ESTA OTRA CLASE PARA HACER LAS PRUEBAS

public class DemostracionArbolBinarioBusqueda{
public static void main(String[] args){
new DemostracionArbolBinarioBusqueda();
}

public DemostracionArbolBinarioBusqueda(){
//Inicializamos el árbol binario de búsqueda
ArbolBinarioBusqueda arbol = new ArbolBinarioBusqueda();
int iOpcion = 0, iDato;
//Desplegar las instrucciones
System.out.println("DEMOSTRACION ARBOL DE BUSQUEDA BINARIA ");
instrucciones();
do{
iOpcion = Entrada.leerInt(" Opcion: ");
switch(iOpcion){
case 1: //Insertar un dato
iDato = Entrada.leerInt("Introduce el dato a insertar: ");
arbol.insertar(iDato);
arbol.imprimir();
break;
case 2: //Eliminar un dato
iDato = Entrada.leerInt("Introduce el dato a eliminar: ");
arbol.eliminar(iDato);
arbol.imprimir();
break;
case 3: //Buscar un dato
iDato = Entrada.leerInt("Introduce el dato a buscar: ");
arbol.buscar(iDato);
break;
case 4: //Recorrido preorden
arbol.recorridoPreorden();
break;
case 5: //Recorrido inorden
arbol.recorridoInorden();
break;
case 6: //Recorrido postorden
arbol.recorridoPostorden();
break;
case 7: //Vaciar el árbol
arbol.vaciar();
arbol.imprimir();
}
}while(iOpcion != 8);
}

private void instrucciones(){
System.out.println(" Elige una opcion "+
"1 para insertar un dato "+
"2 para eliminar un dato "+
"3 para buscar un dato "+
"4 para imprimir el recorrido preorden "+
"5 para imprimir el recorrido inorden o simetrico "+
"6 para imprimir el recorrido postorden "+
"7 para vaciar el arbol "+
"8 para salir del programa ");
}
}

SALUDOS!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por mario (58 intervenciones) el 10/12/2007 17:10:12
Te invito a que entres a mi website en donde uno de mis amigos Eugenio Flores publico un articulo acerca de Arboles B:

http://www.geocities.com/neos_software/articles/j2se/arbolesb.html

Espero te sea de utilidad

Saludos comunidad open source

Neos Software Inc. 2007
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por liz (1 intervención) el 26/10/2011 23:37:06
Funciona muy bien,GRACIAS me salvaste la vida
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por Diego (1 intervención) el 20/11/2011 21:33:36
Hola Una consulta.

como se crea la clase Entrada ?

si me la pudieras contestar te lo agradecería mucho

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por edwin (1 intervención) el 11/09/2013 03:09:43
hola Una pregunta

me pone problema con "Entrada" como lo soluciono?

de antemano gracias por la ayuda que me puedan prestar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:arbol B* en java

Publicado por Fredy (1 intervención) el 25/11/2013 03:20:29
Esta es la clase que se debe ingresar dentro de la clase DemostracionArbolBinarioBusqueda, espero le funcione

private static class Entrada{

private static int leerInt(String texto) {
System.out.println(texto);
int leerInt = 0;
BufferedReader h=new BufferedReader(new InputStreamReader(System.in));
try {
leerInt = Integer.parseInt(h.readLine());
} catch (IOException ex) {
Logger.getLogger(DemostracionArbolBinarioBusqueda.class.getName()).log(Level.SEVERE, null, ex);
}
return leerInt;

// throw new UnsupportedOperationException("Not yet implemented");
}

public Entrada() {
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por Price (1 intervención) el 04/12/2013 00:18:18
Alguien me podrian explicar el funcionamiento de todo programa se los agradeceria mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por jhambert jesus (1 intervención) el 17/03/2014 15:09:04
Hola ese codigo que proporcionastes no es un arbol b asterisco, le falta la division de los nodos al insertar y algunos metodos mas, por favor podrias aportar el arbol b asterisco completo, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por jean (1 intervención) el 31/07/2016 02:48:43
Es un arbol Binario.. o es un arbol B*¿?????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:arbol B* en java

Publicado por El varon de la cerveza (1 intervención) el 24/04/2019 07:19:57
este es un arbol binario... nada que ver con un arbol B, esos arboles tiene grados y son mas eficientes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar