Documentos de Académico
Documentos de Profesional
Documentos de Cultura
“ESTRUCTURA DE DATOS”
GRUPO:
3a3
PRESENTA:
MARTINEZ FLORES MOISES
RAMIREZ CAMARENA KEVIN OSCAR
T1 (Tema 1)
1.1.-(Pregunta 1 del Tema 1)
T2 (Tema 2)
2.1.-(Pregunta 1 del Tema 2)
2.1.1.-(Pregunta 1 de la pregunta 1 del Tema 2)
2.1.2.-( Pregunta 2 de la pregunta 1 del Tema 2)
2.2.-(Pregunta 2 del Tema 2)
2.3.-(Pregunta 3 del Tema 2)
T3 (Tema 3)
T
T1 T2 T3
2.1.1 2.1.2
Clasificación de árboles
Existen cuatro tipos de árbol binario:
A. B. Distinto.
A. B. Similares.
A. B. Equivalentes.
A. B. Completos.
A continuación, se hará una breve descripción de los diferentes tipos de árbol}
binario, así como un ejemplo de cada uno de ellos.
A. B. DISTINTO
Se dice que dos árboles binarios son distintos cuando sus estructuras son
diferentes.
A. B. SIMILARES
Dos árboles binarios son similares cuando sus estructuras son idénticas, pero la
información que contienen sus nodos es diferente.
A. B. EQUIVALENTES
Son aquellos árboles que son similares y que además los nodos contienen la misma
información.
A. B. COMPLETOS
Son aquellos árboles en los que todos sus nodos excepto los del ultimo nivel, tiene
dos hijos; el subárbol izquierdo y el subárbol derecho.
Los algoritmos de inserción y borrado dependen en gran medida del tipo de árbol
que estemos implementando, de modo que por ahora los pasaremos por alto y nos
centraremos más en el modo de recorrer árboles.
Aplicaciones
Un ejemplo de estructura en árbol es el sistema de directorios y ficheros de un
sistema operativo. Aunque en este caso se trata de árboles con nodos de dos tipos,
nodos directorio y nodos archivo, podríamos considerar que los nodos hoja son
archivos y los nodos rama son directorios. Otro ejemplo podría ser la tabla de
contenido de un libro, por ejemplo de este mismo manual, dividido en capítulos, y
cada uno de ellos en subcapítulos. Aunque el libro sea algo lineal, como una lista,
en el que cada capítulo sigue al anterior, también es posible acceder a cualquier
punto de él a través de la tabla de contenido. También se suelen organizar en forma
de árbol los organigramas de mando en empresas o en el ejército, y los árboles
genealógicos.
Tipos de Árboles
• Árboles Binarios: Un árbol binario es un conjunto finito de elementos, el cual
está vacío o dividido en tres subconjuntos separados: raíz del árbol, subárbol
izquierdo y subárbol derecho
• Árbol de búsqueda binario auto-balanceable: Es el que intenta mantener su
altura, o el número de niveles de nodos bajo la raíz, tan pequeños como sea
posible en todo momento, automáticamente
• Árboles AVL: están siempre equilibrados de tal modo que para todos los
nodos, la altura de la rama izquierda no difiere en más de una unidad de la
altura de la rama derecha o viceversa.
• Árboles Rojo-Negro : Un árbol rojo-negro es un árbol binario de búsqueda en
el que cada nodo tiene un atributo de color cuyo valor es rojo o negro.
• Árboles AA: utilizado para almacenar y recuperar información ordenada de
manera eficiente
• Árbol de segmento: es una estructura de datos en forma de árbol para
guardar intervalos o segmentos. Permite consultar cuál de los segmentos
guardados contiene un punto.
• Árboles Multicamino: es un árbol ordenado cuyos nodos deben tener un
número específico de hijos.
• Árboles B: Es un árbol de búsqueda que puede estar vacío o aquel cuyos
nodos pueden tener varios hijos, existiendo una relación de orden entre ellos.
Recorridos de Árboles
Preorden:
• Visitar la Raíz
• Recorrer el subarbol izquierdo
• Recorrer el subarbol derecho
Inorden:
Postorden:
TOOLS:
package EntradaSalida;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Tools {
public static int leerInt(String msje) {
int num = 0;
boolean r = true;
do {
try {
num = (Integer.parseInt(JOptionPane.showInputDialog(null, msje, "dame
un valor", JOptionPane.INFORMATION_MESSAGE)));
r = false;
} catch (NumberFormatException e) {
Tools.errorMsje("error: ingrese valor valido, no vacios ni use decimales
o letras");
}
} while (r);
return num;
}
return cad;
}
// Mensajes de salida
public static void imprimeMsje(String msje) { // Salida de mensaje
JOptionPane.showMessageDialog(null, msje, "salida",
JOptionPane.INFORMATION_MESSAGE)}
public static void errorMsje(String msje) { // Salida de mensaje de error
JOptionPane.showMessageDialog(null, msje, "intenta de nuevo",
JOptionPane.ERROR_MESSAGE);
}
public static void imprimeAreaTexto(String cad) {//Salida en una area de texto
con scroll
JTextArea areaSalida = new JTextArea(10, 4);
JScrollPane scroller = new JScrollPane(areaSalida);
areaSalida.setText("\n" + cad);
JOptionPane.showMessageDialog(null, scroller, "SALIDA",
JOptionPane.INFORMATION_MESSAGE);
}
public static int SiNo() { // Botones se pueden usar en ciclos o en switch
return (JOptionPane.showConfirmDialog(null, "deseas continuar",
"capturando de objetos", JOptionPane.YES_NO_OPTION));
}
// Metodos que permiten seleccionar un dato especifico cuando el ejercicio indica
items a considerar. Modelo que les puede servir para crear nuevos metodos.
String ctrl;
do {
ctrl = leerString("Ingresa tu numero de control");
ctrl = ctrl.trim();
if (ctrl.matches("[0-9]{8}")) {
return ctrl;
} else {
Tools.errorMsje("Recuerda que el numero de control son de 8 digitos");
}
} while (!ctrl.matches("[0-9]{8}"));
return ctrl;
}
}
CLASE ARBOL:
package MemoriaDinamica;
public class Arbol<T extends Comparable<T>> {
private Nodito raiz;//tiene enlazados a todos los nodos
public Arbol() {
raiz = null;
}
//ARBOL VACIO
public boolean ArbolVacio() {
return (raiz == null);
}
//METODO INSERTAR
public void insertarDato(T dato) {
Nodito p = new Nodito(dato);
if (ArbolVacio()) {
raiz = p; //Busca el nodo padre
} else {
Nodito padre = buscaPadre(raiz, p);
if (p.getDato().compareTo(padre.getDato()) >= 0) {
padre.setDer(p); //inserta nodo hijo Derecha
} else {
padre.setIzq(p); //inserta nodo hijo Izquierda
}
}
}
// METODO PRE-ORDEN
public String preorden(Nodito r) {
if (r != null) {
return r.getDato() + "-- " + preorden(r.getIzq()) + " " + preorden(r.getDer())
+ " ";
} else {
return "";
}
}
// METODO POST-ORDEN
public String postorden(Nodito r) {
if (r != null) { //REGLA IZQUIERDA, DERECHA, VISITA R RAIZ
return postorden(r.getIzq()) + "-- " + postorden(r.getDer()) + " " + r.getDato()
+ " ";
} else {
return " ";
}
}
// METODO RECORRIDOS
public String recorridos() {
return "Modo pre-orden:\n" + preorden(raiz);
/*+ "\nModo postorden:\n" + postorden(raiz) + "\n\nModo in-orden 1:\n"
+ inOrden1(raiz) + "\n\n Modo in-orden 2:\n" + inOrden2(raiz) + "\n\n
Modo interno :\n" + interno(raiz)
+ "\n\n Modo externo:\n" + externo(raiz);*/
}
// METODO IN-ORDEN
public String inOrden1(Nodito r) {
if (r != null) { //REGLA IZQUIERDA, RAIZ, DERECHA
return inOrden1(r.getIzq()) + "-- " + r.getDato() + " " + inOrden1(r.getDer())
+ " ";
} else {
return " ";
}
}
// METODO IN-ORDEN2
public String inOrden2(Nodito r) {
if (r != null) { //REGLA DERECHA, RAIZ, IZQUIERDA
return inOrden2(r.getDer()) + "-- " + r.getDato() + " " + inOrden2(r.getIzq())
+ "-- ";
} else {
return " ";
}
}
public T getDato() {
return dato;
}
public void setDato(T dato) {
this.dato = dato;
}
public Nodito<T> getIzq() {
return izq;
}
public void setIzq(Nodito<T> izq) {
this.izq = izq;
}
public Nodito<T> getDer() {
return der;
}
public void setDer(Nodito<T> der) {
this.der = der;
}
}
CLASE MAIN:
package tema_4;
import EntradaSalida.Tools;
import MemoriaDinamica.Arbol;
import MemoriaDinamica.Nodito;
import javax.swing.JOptionPane;
public class Tema_4 {
public static void main(String args[]) {
menu();
}
public static void menu() {
Arbol arbol = new Arbol();
String p;
String opcion[] = {"INSERTAR", "ELIMINAR TERMINAL", "BUSCAR",
"LIMPIAR", "SALIR"};
int sel;
do {
sel = JOptionPane.showOptionDialog(null, " SELECCIONA DANDO
CLICK ", " M E N U", JOptionPane.NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcion, opcion[0]);
switch (opcion[sel]) {
case "INSERTAR":
arbol.insertarDato(Tools.leerInt("inserta el numero"));
Tools.imprimeMsje("Arbol binario:\n" + arbol.recorridos());
break;
case "ELIMINAR TERMINAL":
break;
case "BUSCAR":
Nodito buscar = arbol.busqueda(Tools.leerInt("Dato a buscar"));
if (buscar != null) {
Tools.imprimeMsje("El dato si existe en el arbol: " +
buscar.getDato());
} else {
Tools.errorMsje("El dato no se encuentra en el arbol");
}
break;
case "ELIMINAR":
break;
case "SALIR":
Tools.imprimeMsje("Fin del programa");
break;
}
} while (!"SALIR".equals(opcion[sel]));}
}
RESULTADOS:
CONCLUSION:
Luego de concluir el siguiente tema, debemos tener en cuenta que un árbol como
estructura de datos nos permite almacenar una cantidad significativa de datos de
forma ordenada. Un árbol se representa con un conjunto de nodos entrelazados
entre sí por medio de ramas, debemos tener en cuenta que el nodo base es único,
y se le denomina raíz. En un árbol un padre puede tener varios hijos pero un hijo
solo puede tener un padre. Desde la raíz se puede llegar a cualquier nodo
progresando por las ramas y atravesando los sucesivos niveles estableciendo así
un camino.