Estructura de datos
Unidad 3. Almacenamiento
Actividad 3: Programa las operaciones de un árbol binario, árbol
binario de búsqueda.
Docente: JAZMIN PEREZ MENDEZ
4to Semestre
Grupo: DS-DEDA-2001-B1-003
Roberto Carlos Pavón García
Matricula: ES1821012068
16/03/2020
El siguiente documento describe la implementación y funcionalidad de los recorridos que
se pueden realizar en un Árbol Binario de Búsqueda.
Datos Ingresados al árbol
(8, 3, 10, 1, 6, 14, 4, 7, 13)
Recorrido en InOrden
Recorrido en PreOrden
Recorrido en PostOrden
Código Fuente
Clase Main
package abb;
import javax.swing.JOptionPane;
/**
*
* @author Roberto
*/
public class ABB {
public static void main(String[] args) {
int opc=0,elemento;
// String nombre;
ArbolB arbol = new ArbolB();
// Se inicia el menu del programa con 5 opciones
do{
try{//bloque try catch para evitar errores al correr el programa si se ingresa un dato
incorrecto
opc=Integer.parseInt(JOptionPane.showInputDialog(null,"1.- Agregar Nodo\n"+
"2.- Recorrer Arbol en InOrden\n"+
"3.- Recorrer Arbol en PreOrden\n"+
"4.- Recorrer Arbol en PostOrden\n"+
"5.- Salir\n"
+ "Elige una Opcion"));
// Dependiendo de la opcion elegida se inician los casos:
switch(opc){
// esta opcion invoca el metodo para agregar un nuevo nodo o dato
case 1:
elemento = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingresa el
numero del Nodo", "Agregar Nodo",1));
// nombre = JOptionPane.showInputDialog(null, "Ingresa el nombre del
Nodo", "Agregar Nodo",1);
arbol.agregarNodo(elemento);
break;
// Este caso permite recorrer el arbol en InOrden invocando el metodo para
ello
case 2:
if(!arbol.estaVacio()){//lo primero que hace es verificar que el arbol no ete
vacio
arbol.inOrden(arbol.raiz);
}
else{
JOptionPane.showMessageDialog(null, "El Arbol esta vacio", "Vacio",1);
}
break;
// Este caso permite recorrer el arbol en PreOrden invocando el metodo
para ello
case 3:
if(!arbol.estaVacio()){
arbol.preOrden(arbol.raiz);
}
else{
JOptionPane.showMessageDialog(null, "El Arbol esta vacio", "Vacio",1);
}
break;
// Este caso permite recorrer el arbol en PostOrden invocando el metodo
para ello
case 4:
if(!arbol.estaVacio()){
arbol.postOrden(arbol.raiz);
}
else{
JOptionPane.showMessageDialog(null, "El Arbol esta vacio", "Vacio",1);
}
break;
case 5:
JOptionPane.showMessageDialog(null, "Aplicacion Finalizada", "Salir",1);
break;
default:
JOptionPane.showMessageDialog(null, "Opcion Incorrecta ", "Error",1);
}
}catch(NumberFormatException n){
JOptionPane.showConfirmDialog(null, "Error"+n.getMessage());
}
}while(opc!=5);
}
}
Clase Nodo
package abb;
/**
*
* @author Roberto
*/
public class Nodo {
// se inicializa los datos que recibira el nodo a crear y los punteros necesarios para cada
nodo
int dato;
// String nombre;
Nodo izquierdo, derecho;
//se asigna el numero inresado por el usuario al nodo y sus punteros derecho e izquierdo
public Nodo(int d){
this.dato=d;
// this.nombre=nom;
this.derecho=null;
this.izquierdo=null;
}
}
Clase ArbolB
package abb;
/**
*
* @author Roberto
*/
public class ArbolB {
Nodo raiz;
public ArbolB(){
raiz = null;
}
public void agregarNodo(int d){
Nodo nuevo = new Nodo(d);
if(raiz == null){
raiz=nuevo;
}
else{
Nodo auxiliar=raiz;
Nodo padre;
while(true){
padre=auxiliar;
if(d<auxiliar.dato){
auxiliar=auxiliar.izquierdo;
if(auxiliar==null){
padre.izquierdo=nuevo;
return;
}
}
else{
auxiliar=auxiliar.derecho;
if(auxiliar==null){
padre.derecho=nuevo;
return;
}
}
}
}
}
// metodo de tipo logico que indicara si el arbol esta vacio
public boolean estaVacio(){
return raiz==null;
}
// metodo para realizar el recorrido del arbol en inOrden
public void inOrden(Nodo r){
if(r!=null){//si la raiz del arbol no esta vacia el metodo se invoca a si mismo
// conviertiendose en una funcion recursiva donde mostrara primero los nodos
// izquierdos y despues los derechos
inOrden(r.izquierdo);
System.out.println(r.dato);
inOrden(r.derecho);
}
}
// metodo para realizar el recorrido del arbol en inOrden
public void preOrden(Nodo r){
if(r!=null){//si la raiz del arbol no esta vacia el metodo se invoca a si mismo
// conviertiendose en una funcion recursiva donde mostrara primero la raiz, despues
los nodos
// izquierdos y despues los derechos
System.out.println(r.dato);
preOrden(r.izquierdo);
preOrden(r.derecho);
}
}
// metodo para realizar el recorrido del arbol en inOrden
public void postOrden(Nodo r){
if(r!=null){//si la raiz del arbol no esta vacia el metodo se invoca a si mismo
// conviertiendose en una funcion recursiva donde mostrara primero los nodos
// izquierdos, despues los derecho y al final la raiz
postOrden(r.izquierdo);
postOrden(r.derecho);
System.out.println(r.dato);
}
}
}
Bibliografía
MasterHeHeGar. (20 de Septiembre de 2014). "09 - Métodos Recursivos (EDDJava)". Obtenido de
YouTube: https://www.youtube.com/watch?
v=aIZhN5skimY&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=9
MasterHeHeGar. (08 de Noviembre de 2014). "33 - Árboles Binarios (EDDJava)". Obtenido de
YouTube: https://www.youtube.com/watch?
v=JXckd1_XdAU&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=33
MasterHeHeGar. (08 de Noviembre de 2014). "34 - Árboles Binarios de Búsqueda, Creación e
Inserción (EDDJava)". Obtenido de YouTube: https://www.youtube.com/watch?
v=ZKnwBJ8q2TE&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=34
MasterHeHeGar. (08 de Noviembre de 2014). "35 - Árboles Binarios de Búsqueda, Recorrido
InOrden (EDDJava)". Obtenido de YouTube: https://www.youtube.com/watch?
v=l8XPkY_q4Qs&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=35
MasterHeHeGar. (28 de Noviembre de 2014). "36 - Árboles Binarios de Búsqueda, Recorrido
PreOrden (EDDJava)". Obtenido de YouTube: https://www.youtube.com/watch?v=Nz-
9ZQrhgO0&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=36
MasterHeHeGar. (10 de Noviembre de 2014). "37 - Árboles Binarios de Búsqueda, Recorrido
PostOrden (EDDJava)". Obtenido de YouTube: https://www.youtube.com/watch?
v=52mLzH97gYA&list=PLCLpAU8VN0j4RGemFfybZrWoSX57NbEq9&index=37
Universidad Abierta y a Distancia de México. (Marzo de 2020). "Estructura de datos. Unidad 3.
Almacenamiento". Obtenido de ceit.unadmexico.mx/contenidos:
https://ceit.unadmexico.mx/contenidos/DCEIT/BLOQUE1/DS/04/DEDA/U3/descargables/
Unidad_3_Almacenamiento_DEDA.pdf