Boletín 506. Árbol binario de búsqueda (opcional)
En este boletín implementaremos un árbol binario de búsqueda utilizando el patrón Iterator.
Además, crearemos una librería con esta estructura de datos para poder utilizarla en cualquier proyecto de Java. Veremos cómo incluirla de manera manual y también cómo crear un repositorio en Maven y usarla desde ese repositorio.
Ejercicios
Ejercicio 1. Sigue los siguientes pasos para crear un árbol binario de búsqueda (BST).
- Crea la clase
ArboreBinariaBusca:- Para que el árbol pueda almacenar cualquier tipo de dato, modifica la clase para que contenga una clase genérica
T. - Debemos crear ahora los atributos:
- Tendremos el atributo
nodode la claseTpara poder almacenar cualquier tipo de objeto. - Crea dos atributos de la propia clase, uno para el subárbol izquierdo y otro para el derecho.
- Tendremos el atributo
- Crea el método recursivo
engadirElemento(T elemento)para añadir un nuevo elemento. Si el atributonodoes nulo, asigna el elemento al nodo, si no debes decidir si añadirlo al subárbol izquierdo o derecho. Como necesitas comparar elementos, deberías indicar que la clase genéricaTtenga implementada la interfaz<Comparable<T>>. - Crea el método recursivo
List<T> recorridoInOrde()que devuelve una lista con los elementos ordenados de menor a mayor.
- Para que el árbol pueda almacenar cualquier tipo de dato, modifica la clase para que contenga una clase genérica
- Crea la clase
Xogadorque implemente la interfazComparable<Xogador>con las siguientes características para poder probar nuestro Árbol Binario de Búsqueda:- Almacenaremos para cada jugador su nombre y dorsal.
- Crea un constructor con los parámetros anteriores.
- Documenta el constructor.
- Crea
gettersysetterspara todos los parámetros. - Implementa el método
int compareTo(Xogador arg0)que ordene los jugadores según su dorsal. - Redefine el método
toString()con el formato<dorsal>: <nombre>.
- Realiza un programa principal que:
- Crea un objeto
abbde la claseArboreBinariaBusca. - Crea objetos de
Xogadorcon los siguientes datos y añádelos al árbol:Jugador Dorsal Lionel Messi 10 Cristiano Ronaldo 7 Neymar Jr. 11 Kylian Mbappé 19 Zlatan Ibrahimović 8 Robert Lewandowski 9 Sergio Ramos 4 Kevin De Bruyne 17 Mohamed Salah 21 Erling Haaland 99 - Imprime en pantalla la lista de jugadores utilizando el método
recorridoInOrde().
- Crea un objeto
Ejercicio 2. Vamos a utilizar el patrón Iterator en nuestra clase que representa un árbol binario de búsqueda.
- Crea la clase
IteradorABBque implemente la interfazIterator<T>:- La clase
IteradorABBes una clase con tipo genérico, pero este tipo debe tener implementada la interfazComparable. - Crea un constructor que reciba una
ArboreBinariaBusca<T>. Debes almacenar la lista que devuelverecorridoInOrde()en un atributo. - Debemos implementar dos métodos:
public T next(): devuelve el elemento actual y avanza al siguiente elemento.public boolean hasNext(): indica si hay algún elemento más.
- Para implementar estos métodos necesitarás un atributo para saber en qué posición te encuentras actualmente de la lista. Implementa los dos métodos.
- La clase
- En la clase
ArboreBinariaBuscaimplementa la interfazIterable<T>:- Implementa el único método de la interfaz
public Iterator<T> iterator()que devolverá un objeto de la claseIteradorABB.
- Implementa el único método de la interfaz
- Modifica el programa principal para poder recorrer el árbol directamente utilizando un bucle
for each:for( Xogador xogador: abb) {
System.out.println(xogador);
}
Ejercicio 3. Vamos a crear una librería que contenga las clases del árbol.
- Haz una copia de seguridad del código.
- Modifica el proyecto del siguiente modo:
- Elimina la clase
Xogadory borra todo el contenido del métodomain. - Crea el paquete
arboresy añade a ese paquete las clasesIteradorABByArboreBinariaBusca. - Pulsa
F1en Visual Studio Code y seleccionaJava: export jar...y después selecciona<without main class>porque solo queremos exportar las clasesIteradorABByArboreBinariaBusca. - Esto creará un archivo con extensión
jarque contendrá nuestras clases compiladas. Solo debemos añadirlo a otros proyectos para poder utilizar estas clases.
- Elimina la clase
- Crea un nuevo proyecto:
- Añade una copia del archivo
jaranterior al directoriolibdel proyecto. - En el programa principal crea un objeto
ArboreBinariaBuscadeString. - Añade solo los nombres de los jugadores de la tabla anterior y con
for...eachpuedes recorrerlos para imprimirlos.
- Añade una copia del archivo
Ejercicio 4: Vamos a crear un repositorio Maven para poder usarlo para nuestras librerías. Se recomienda usar Debian.
- Vamos a crear un repositorio en Maven en un servidor para poder acceder desde cualquier equipo a nuestras librerías.
- Instala
DockeryDocker Compose. (En los equipos del centro ya está instalado) - Instala la extensión de Docker en Visual Studio Code.
- Crea el archivo
docker-compose.yamlen un directorio con el siguiente contenido para crear un servidor de repositorios con Nexus:services:
nexus:
image: sonatype/nexus3
volumes:
- "nexus-data:/nexus-data"
ports:
- "8081:8081"
volumes:
nexus-data: {} - Sitúate en una terminal en el directorio donde tienes el archivo anterior y ejecuta
docker compose up. - Ve a la extensión de VSC de Docker, pincha en el contenedor que se creó y pulsa en
Attach shelly se abrirá una consola dentro del contenedor. - Ejecuta el comando
cat /nexus-data/admin.passwordpara obtener la contraseña de Nexus. - Entra en el navegador web en
localhost:8081para acceder a la interfaz web de Nexus e inicia sesión con el usuarioadminy la contraseña obtenida en el paso anterior. - Cambia la contraseña por
abc123.y activa el uso anónimo. - Ve a
Ajustes(tiene un icono de engranaje) y después aRepository > Repositoriesy pulsa enCreate repositorypara crear un repositorio. - Selecciona
maven2(hosted)para que sea un repositorio Maven. Ponle de nombreprog. - Pulsa el botón a la izquierda de
Ajustesy ve aBrowsey selecciona el repositorio creado. - Sube el
jarcreado en el ejercicio 2 y completa la siguiente info:Extension:jarGroup ID:arboresArtifact ID:ArboresVersion:1- Activa:
Generate a POM file with these coordinates
- Pulsa en
Uploady ya tendremos incluida nuestra librería en el repositorio Maven propio.
- Instala
- Vamos a probar nuestro repositorio Maven:
- Crea un proyecto en Maven.
- En el archivo
pom.xmlañade las siguientes líneas para indicar que use nuestro repositorio:<repositories>
<repository>
<id>prog</id>
<name>prog</name>
<url>http://localhost:8081/repository/prog/</url>
</repository>
</repositories> - Además, añade en el repositorio la librería de los árboles binarios de búsqueda:
<dependencies>
<dependency>
<groupId>arbores</groupId>
<artifactId>Arbores</artifactId>
<version>1.0</version>
</dependency>
</dependencies> - En el programa principal crea un objeto
ArboreBinariaBuscadeString. - Añade solo los nombres de los jugadores de la tabla anterior y con
for...eachpuedes recorrerlos para imprimirlos.