sábado, 2 de julio de 2011

primer codigo: sobre arboles

Bueno en este primero codigo sera recpecto arboles un ramo que tuve en la carrera de estructura de datos en su momento me costo hacer el codigo asisque espero que ahora le pueda servir a mas de un estudiante :). este codido cuenta con 3 clases la principal, arbol y nodo. donde el usurio ingresa por pantalla el valor que quiere ingresar y respecto a este tiene varias opciones espero les guste.

//clase pricinpal

import java.io.*;
import java.util.Scanner;

public class principal{
static void main(){

arbol miArbol=new arbol();
int dato;


Scanner leer =new Scanner(System.in);
int opcion;

do {
System.out.println(" ");
System.out.println("Ingrese 0 para salir");
System.out.println("Ingrese 1 para insertar nodo");
System.out.println("Ingrese 2 para mostrar el arbol de forma IRD");
System.out.println("Ingrese 3 para mostrar el arbol de forma RID");
System.out.println("Ingrese 4 para mostrar el arbol de forma IDR");
System.out.println("Ingrese 5 para mostrar el numero de nodos que tiene el arbol");
System.out.println("Ingrese 6 para conoser la profundidad del arbol");
System.out.println("Ingrese 7 si quiere ver cuantos nodos son ABB ");
System.out.println("Ingrese 8 para mostrar si es ABB responde true o false");
System.out.println("Ingrese 9 decea conoser la suma de todos los nodos ");
System.out.println("Ingrese 10 si quere saber si el arbol esta completo ");
System.out.println("Ingrese 11 si quiere saber cual es menor nieto derecho ");

System.out.println("Ingrese opcion: ");

opcion = leer.nextInt();

switch(opcion){
case 0:

System.out.print("usted a deceado salir del programa Adios ");
break;

case 1:

System.out.print("entero positivo: ");
dato= leer.nextInt();

if(dato>0){
miArbol.Insertar(dato);}


break;

case 2:
miArbol.mostrarIRD();
break;

case 3:
miArbol.mostrarRID();
break;
case 4:
miArbol.mostrarIDR();
break;

case 5:
int lisz=miArbol.contarnodos();
System.out.println("La cantidad de nodos es: "+lisz);
break;

case 6:
int ct = miArbol.Pnodos();
System.out.println("La Profundidad de nodos es: "+ct);
break;

case 7:
int ui = miArbol.EsABB();
System.out.println("la cantidad de nodos qe es ABB es:"+ ui);
break;

case 8:
boolean que = miArbol.AverABB();
System.out.println("La respuesta es:"+ que);
break;

case 9:
int sumita = miArbol.LaSuma();
System.out.println("La suma es: "+sumita);
break;

case 10:
boolean cm = miArbol.SiCompleto();
System.out.println("la respuesta es: "+ cm);
break;

case 11:
int aa= miArbol.SiMeDer();
System.out.println("la respuesta es: "+ aa);

break;

default:
System.out.println("error el numero ingresado esta fuera de rango");
break;
}

} while(opcion !=0);

}
}


//clase arbol

public class arbol {
private nodo raiz;

public arbol(){
raiz = null;
}
//---------------------------------------------------------
public void Insertar(int valor){
nodo nuevo = new nodo(valor);
raiz = colocaNodo(raiz, nuevo);
}

private nodo colocaNodo(nodo actual, nodo nuevo){
if(actual==null)
return nuevo;
else {
if(actual.hizq <= actual.hder){
actual.hizq++;
actual.nizq = colocaNodo(actual.nizq, nuevo);
}
else {
actual.hder++;
actual.nder= colocaNodo(actual.nder, nuevo);
}
}
return actual;
}
//---------------------------------------------------------
private void IRD(nodo actual) {
if(actual!=null) {
IRD(actual.nizq);
System.out.print(actual.dato + " - ");
IRD(actual.nder);
}
}

public void mostrarIRD(){
System.out.println("IRD: ");
IRD(raiz);
System.out.println();
}
//---------------------------------------------------------

public void RID(nodo actual){
if(actual!=null){
System.out.print(actual.dato + " - ");
RID(actual.nizq);
RID(actual.nder);
}}

public void mostrarRID(){
System.out.println("RID: ");
RID(raiz);
System.out.println();
}

//---------------------------------------------------------

public void IDR(nodo actual){
if(raiz!=null){
RID(actual.nizq);
RID(actual.nder);
System.out.print(actual.dato+ " - ");}}


public void mostrarIDR(){
System.out.println("IDR: ");
IDR(raiz);
System.out.println();}

//---------------------------------------------------------

public int contar(nodo actual){
if(actual==null){
return 0;
}
else{
return 1+contar(actual.nder)+contar(actual.nizq);
}
}
public int contarnodos(){
return contar(raiz);
}

//---------------------------------------------------------

public int profundidad(nodo actual){
if ( actual == null){
return 0;}
else{
int PI= profundidad(actual.nizq);
int PD= profundidad(actual.nder);
if (PI >= PD) {
return 1 + PI;}
else {
return 1 + PD;
}}
}

public int Pnodos(){
return profundidad(raiz);

}

//---------------------------------------------------------

public int ABB(nodo actual){
if ( actual == null){
return 0;}
else {
int VI = actual.dato - 1;
int VD= actual.dato + 1;
if (actual.nizq != null){
VI= actual.nizq.dato;
}
if ( actual.nder != null){
VD= actual.nder.dato;
}
if( VI < actual.dato && actual.dato < VD){
return 1 + ABB(actual.nizq) + ABB(actual.nder);}
else{
return ABB(actual.nizq) + ABB(actual.nder);
}

}}
public int EsABB(){
return ABB(raiz);
}

//---------------------------------------------------------
public boolean SiABB(nodo actual){
if(actual == null){
return true;
}
else {
if( EsABB() == contar(actual)){
return true;}
else{
return false;}
} }

public boolean AverABB(){
return SiABB(raiz);
}

//---------------------------------------------------------

public int Suma(nodo actual){
if (actual == null){
return 0;}
else{
return actual.dato+ Suma(actual.nizq) + Suma(actual.nder); }
}


public int LaSuma(){
return Suma(raiz);
}
//---------------------------------------------------------

public boolean Completo(nodo actual){
if (actual == null){
return true;}
else {
int P = profundidad(actual);
int C = contar(actual);
if (Math.pow(2,P) - 1 == C){
return true;
}else{
return false;
}}
}

public boolean SiCompleto(){
return Completo(raiz);}



//---------------------------------------------------------
int li;
int MenorNietoDer(nodo actual)
{if(actual!=null)
{if(actual.nder!=null){
li= MI(actual.nder);}
else{
li=actual.dato;} }
else {
li=raiz.dato;}
return li;}

public int MI(nodo actual){
if(actual.nizq == null){
return actual.dato;
}else{
return MI(actual.nizq);
}
}
public int SiMeDer(){
return MenorNietoDer(raiz);}
//---------------------------------------------------------

}


//clase nodo

public class nodo {
int dato;
int hizq;
int hder;
nodo nizq;
nodo nder;


public nodo(int valor) {
dato = valor;
hizq = 0;
hder = 0;
nizq = null;
nder = null;
}
}


No hay comentarios:

Lízbeth Alejandra Lopez Jimenez