import java.util.*;
public class ArbolB { static NodoArbol raiz;
public ArbolB()
{ raiz=null;
}
public NodoArbol Raiz()
{ return raiz;
}
public void creaRaiz (int valor)
{ raiz.setInfo(valor);
}
public void insertar(int dato)
{ NodoArbol nuevo=new NodoArbol();
nuevo.setInfo(dato);
Scanner lee=new Scanner (System.in);
System.out.println("De los datos para este nodo:"); nuevo.setdatos(lee.nextLine());
if(raiz==null)
raiz=nuevo;
else
{ NodoArbol actual=raiz;
NodoArbol anterior=null;
while(actual!=null)
{ anterior=actual;
if(dato>actual.getInfo())
actual=actual.getHijoDer();
else
actual=actual.getHijoIzq();
}
if(dato>anterior.getInfo())
anterior.setHijoDer(nuevo);
else
anterior.setHijoIzq(nuevo);
}
}
public String buscar(int clave, NodoArbol p)
{ if (p == null)
return null;
if (clave > p.getInfo())
return buscar(clave, p.getHijoDer());
if (clave < p.getInfo())
return buscar(clave, p.getHijoIzq());
if (clave == p.getInfo())
return p.getDatos();
else
return null;
}
public String buscarMin( NodoArbol nodo )
{ if (nodo == null)
return null;
if(nodo.getHijoIzq()==null)
return nodo.getDatos();
return buscarMin(nodo.getHijoIzq());
}
public int claveMin(NodoArbol nodo)
{ if (nodo == null)
return 0;
if(nodo.getHijoIzq()==null)
return nodo.getInfo();
return claveMin(nodo.getHijoIzq());
}
public NodoArbol borrarMin(NodoArbol p)
{ if (p == null)
System.out.println("Arbol vacio. Error al borrar"); else if (p.getHijoIzq() != null)
p.setHijoIzq(borrarMin(p.getHijoIzq())) ;
else p = p.getHijoDer();
return p;
}
public NodoArbol borrar(int clave, NodoArbol p)
{ if (p == null)
System.out.println("Arbol vacio. Error al borrar"); else if (clave < p.getInfo())
p.setHijoIzq(borrar(clave, p.getHijoIzq()));
else if (clave > p.getInfo())
p.setHijoDer(borrar(clave, p.getHijoDer()));
else if ((p.getHijoDer() != null) && (p.getHijoIzq() != null))
{ p.setInfo(claveMin(p.getHijoDer()));
p.setdatos(buscarMin(p.getHijoDer()));
p.setHijoDer(borrarMin(p.getHijoDer()));
}
else
p = (p.getHijoIzq() != null) ? p.getHijoIzq() : p.getHijoDer();
return p;
}
/////////METODOS DE ORDENAMIENTO//////////
public void preorden (NodoArbol p)
{ if (p!=null)
{ System.out.println(p.getInfo()+" - :"+p.getDatos());
preorden(p.getHijoIzq());
preorden(p.getHijoDer());
}
}
public void simetrico (NodoArbol p)
{ if (p!=null)
{ simetrico(p.getHijoIzq());
System.out.println(p.getInfo()+" - :"+p.getDatos());
simetrico(p.getHijoDer());
}
}
public void postorden (NodoArbol p)
{ if(p!=null)
{ postorden(p.getHijoIzq());
postorden(p.getHijoDer());
System.out.println(p.getInfo()+" - :"+p.getDatos());
}
}
////////////////////////////////////////
public static void main (String[] args)
{ Scanner dato = new Scanner(System.in);
int a,b;
ArbolB A=new ArbolB();
boolean ban=false;
do
{ System.out.println("\n\t****MENU****\n"); System.out.println(" 1. insertar nodos"); System.out.println(" 2. recorridos"); System.out.println(" 3. busqueda"); System.out.println(" 4. borrado"); System.out.println(" 0. salir"); System.out.print("Da tu opcion:"); b=dato.nextInt();
switch (b)
{ case 1:
System.out.println("tecle el num. de nodos a insetar:"); int n=dato.nextInt();
if (ban == false)
System.out.println("NOTA: Laa primera Key dada se tomara como raiz del arbol");
for (int i=0;i<n;i++)
{ System.out.println("Tecle la KEY del nodo:"); a= dato.nextInt();
A.insertar(a);
}
ban=true;
break;
case 2:
if (raiz==null)
System.out.println("\n*ERROR* (el arbol esta vacio)"); else
{ System.out.println("\n***Recorridos***"); System.out.println("PREORDEN:"); A.preorden(A.Raiz());
System.out.println();
System.out.println("SIMETRICO:"); A.simetrico(A.Raiz());
System.out.println();
System.out.println("POSTORDEN:"); A.postorden(A.Raiz());
System.out.println();
}
break;
case 3:
if (raiz==null)
System.out.println("\n***ERROR*** (el arbol esta vacio)"); else
{ System.out.println("Ingresa la Key del nodo a buscar:"); int buscar=dato.nextInt();
String resul=A.buscar(buscar, A.Raiz());
if (resul==null)
System.out.println("***Key no existente***"); else
System.out.println("Los datos de la Key ingresada son: "+resul); }
break;
case 4:
if (raiz==null)
System.out.println("\n***ERROR*** (el arbol esta vacio)"); else
{ System.out.println("Ingresa la Key del nodo a borrar:"); int eli=dato.nextInt();
NodoArbol resul=A.borrar(eli, A.raiz);
if (resul==null)
System.out.println("***Key no existente***"); else
System.out.println("La Key dada fue eliminada exitosamente."); }
break;
}
}while(b!=0);
}
}
class NodoArbol {
private int info;
private String datos;
private NodoArbol hijoizq;
private NodoArbol hijoder;
public NodoArbol()
{ info=0;
datos="";
hijoizq=null;
hijoder=null;
}
public void setHijoIzq (NodoArbol e)
{ this.hijoizq=e;
}
public void setHijoDer (NodoArbol d)
{ this.hijoder=d;
}
public void setInfo (int info)
{ this.info=info;
}
public void setdatos(String inf)
{ this.datos=inf;
}
public NodoArbol getHijoIzq ()
{ return hijoizq;
}
public NodoArbol getHijoDer ()
{ return hijoder;
}
public int getInfo ()
{ return info;
}
public String getDatos()
{ return datos;
}
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios