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