/*********************************************************
* Archivo: ArbolBinario.java
* Lenguaje: Java
* Estudiantes: Qaser Awan Ruiz
* Institución: Instituto Tecnológico de Costa Rica
* Notas:
* -Restricciones:
* No me hago responsable del uso que le den
* a los algoritmos.
*
* -Observaciones:
* El prototipo del trabajo fue brindado
* en el curso de estructuras de datos.
*********************************************************/
//Definicion de la clase NodoBinario
import java.io.*;
class NodoBinario{
int dato;
NodoBinario Hizq, Hder;
//Constructores
NodoBinario (int Elem){
dato = Elem;
NodoBinario Hizq, Hder = null;
}
//Insercion de un elemento
public void InsertaBinario (int Elem){
if(Elem < dato){
if (Hizq == null)
Hizq = new NodoBinario(Elem);
else
Hizq.InsertaBinario(Elem);
}
else{
if (Elem > dato){
if (Hder == null)
Hder = new NodoBinario (Elem);
else
Hder.InsertaBinario(Elem);
}
}
}
}
//Definicion de la clase Arbol
class Arbol{
Cola Cola = new Cola();
NodoBinario Padre;
NodoBinario Raiz;
//Constructor
public Arbol(){
Raiz = null;
}
//Insercion de un elemento en el arbol
public void InsertaNodo(int Elem){
if(Raiz == null)
Raiz = new NodoBinario (Elem);
else
Raiz.InsertaBinario (Elem);
}
//Preorden Recursivo del arbol
public void Preorden (NodoBinario Nodo){
if(Nodo == null)
return;
else{
System.out.print (Nodo.dato + " ");
Preorden (Nodo.Hizq);
Preorden (Nodo.Hder);
}
}
//PostOrden recursivo del arbol
public void PostOrden (NodoBinario Nodo){
if(Nodo == null)
return;
else{
PostOrden (Nodo.Hizq);
PostOrden (Nodo.Hder);
System.out.print (Nodo.dato + " ");
}
}
//Inorden Recursivo del arbol
public void Inorden (NodoBinario Nodo){
if(Nodo == null)
return;
else{
Inorden (Nodo.Hizq);
System.out.print(Nodo.dato + " ");
Inorden (Nodo.Hder);
}
}
//Busca un elemento en el arbol
void Busqueda (int Elem, NodoBinario A){
if((A == null) | (A.dato == Elem)){
System.out.print(A.dato + " ");
return;
}
else{
if(Elem>A.dato)
Busqueda (Elem, A.Hder);
else
Busqueda ( Elem, A.Hizq);
}
}
//Altura del arbol
public int Altura (NodoBinario Nodo){
int Altder = (Nodo.Hder == null? 0:1 + Altura (Nodo.Hder));
int Altizq = (Nodo.Hizq == null? 0:1 + Altura (Nodo.Hizq));
return Math.max(Altder,Altizq);
}
//Recorrido en anchura del arbol
public void Anchura (NodoBinario Nodo){
Cola cola= new Cola();
NodoBinario T = null;
System.out.print ("El recorrido en Anchura es: ");
if(Nodo != null){
cola.InsertaFinal (Nodo);
while(!(cola.VaciaLista ())){
T = cola.PrimerNodo.datos;
cola.EliminaInicio();
System.out.print(T.dato + " ");
if (T.Hizq != null)
cola.InsertaFinal (T.Hizq);
if (T.Hder != null)
cola.InsertaFinal (T.Hder);
}
}
System.out.println();
}
}
//Definición de la Clase NodoLista
class NodosListaA{
NodoBinario datos;
NodosListaA siguiente;
//Construtor Crea un nodo del tipo Object
NodosListaA (NodoBinario valor){
datos =valor;
siguiente = null; //siguiente con valor de nulo
}
// Constructor Crea un nodo del Tipo Object y al siguiente nodo de la lista
NodosListaA (NodoBinario valor, NodosListaA signodo){
datos = valor;
siguiente = signodo; //siguiente se refiere al siguiente nodo
}
}
//Definición de la Clase Lista
class Cola{
NodosListaA PrimerNodo;
NodosListaA UltimoNodo;
String Nombre;
//Constructor construye una lista vacia con un nombre de List
public Cola(){
this ("Lista");
}
//Constructor
public Cola (String s){
Nombre = s;
PrimerNodo = UltimoNodo =null;
}
//Retorna True si Lista Vacía
public boolean VaciaLista() {
return PrimerNodo == null;
}
//Inserta un Elemento al Frente de la Lista
public void InsertaInicio (NodoBinario ElemInser){
if(VaciaLista())
PrimerNodo = UltimoNodo = new NodosListaA (ElemInser);
else
PrimerNodo = new NodosListaA (ElemInser, PrimerNodo);
}
//Inserta al Final de la Lista
public void InsertaFinal(NodoBinario ElemInser){
if(VaciaLista())
PrimerNodo = UltimoNodo = new NodosListaA (ElemInser);
else
UltimoNodo=UltimoNodo.siguiente =new NodosListaA (ElemInser);
}
//Eliminar al Inicio
public void EliminaInicio(){
if(VaciaLista())
System.out.println ("No hay elementos");
// Restablecer las referencias de PrimerNodo y UltimoNodo
if(PrimerNodo.equals (UltimoNodo))
PrimerNodo = UltimoNodo = null;
else
PrimerNodo = PrimerNodo.siguiente;
}
//Elimina al final
public void EliminaFinal (){
if(VaciaLista())
System.out.println ("No hay elementos");
// Restablecer las referencias de PrimerNodo y UltimoNodo
if (PrimerNodo.equals (UltimoNodo))
PrimerNodo = UltimoNodo = null;
else{
NodosListaA Actual =PrimerNodo;
while (Actual.siguiente != UltimoNodo)
Actual = Actual.siguiente;
UltimoNodo =Actual;
Actual.siguiente = null;
}
}
}
class ArbolBinarioA{
public static void main (String[]args)throws IOException
{
Arbol A = new Arbol();
String dato;
int indice;
int opc=0;
InputStreamReader en=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(en);
System.out.println("****BIENVENIDO A ARBOL BINARIO ORDENADO****");
do{
System.out.println("MENU\n");
System.out.println("1.Insertar");
System.out.println("2.Eliminar");
System.out.println("3.Recorrido en Pre orden");
System.out.println("4.Recorrido en In orden");
System.out.println("5.Recorrido en Pos orden");
System.out.println("6.Salir");
System.out.println("seleccione opcion --->\n");
String decide=br.readLine();
opc=Integer.parseInt(decide);
switch(opc)
{
case 1:
System.out.println("Dame numero\n");
dato=br.readLine();
int p=Integer.parseInt(dato);
A.InsertaNodo(p);
break;
case 2:
// System.out.println("Dame el numero a borrar\n");
// String g=br.readLine();
// indice=Integer.parseInt(g);
// A.Busqueda(indice);
break;
case 3:
System.out.print("El recorrido en Preorden es: ");
A.Preorden (A.Raiz);
System.out.println();
break;
case 4:
System.out.print("El recorrido en Inorden es: ");
A.Inorden (A.Raiz);
System.out.println();
break;
case 5:
System.out.print("El recorrido en Postorden es: ");
A.PostOrden (A.Raiz);
System.out.println();
break;
}//fin switch
}while(opc!=6);//fin do
//System.out.println("La altura del arbol es: " + A.Altura (A.Raiz));
// A.Anchura (A.Raiz);
}
}
Comentarios sobre la versión: 1.0 (4)
me arroja igual el recorrido postorden y el inorden?
public void recorridoProdundidad1(Nodo r){
NodoL ele= new NodoL();
ele.setInfo(r);
c.insercionCab(ele);
while(c.getCab()!=null){
NodoL aux=c.extraerCola();
if(aux.getInfo().getIzq()!=null) {
ele= new NodoL();
ele.setInfo(aux.getInfo().getIzq());
c.insercionCab(ele);
}
if(aux.getInfo().getDer()!=null) {
ele= new NodoL();
ele.setInfo(aux.getInfo().getDer());
c.insercionCab(ele);
}
System.out.print(aux.getInfo().getInfo()+"->");
}
System.out.println("null");
}