Ignorar lo que esta dentro de las funciones principales int main()
, allí se encuentran las pruebas que se le hacen a las implementaciones mientras se construyen. Una vez terminadas se procede a borrar el contenido de la función main()
.
En las implementaciones de Pila
, Cola
y ColaDoble
no se utiliza this->
para acceder a la instancia base de Lista
debido a la sencillez del código y la casi inexistencia de otras variables diferentes de "lista". En otras palabras, el uso de this->
es redundante en este caso, ya que su principal propósito es distinguir entre variables locales y variables de instancia.
En el método level_order
de la clase ArbolBinario
se utiliza un array estilo C
en vez de un std::array
debido a que, incluir un std::array
implicaría usar una estructura de datos de la librería estándar y no una implementación propia.
En los métodos de la clase ArbolBinario
, los argumentos que implican otros árboles deben pasarse por referencia. Ej: arbol.metodo(&otro_arbol);
. Esto se debe a que los parámetros son punteros y esperan una dirección de memoria. No tendría sentido trabajar con copias de los árboles, por lo tanto, se debe acceder a los árboles originales.
En el directorio include
se encuentran las implementaciones de las estructuras con la extension .hpp
, es decir, a modo encabezado (#include <encabezado>
). En este caso, al ser un encabezado propio, para poder incluir los archivos se deben usar comillas dobles y escribir la ruta relativa (la ubicación del archivo .hpp
respecto al archivo .cpp
en el que se está incluyendo): Ej: #include "include/encabezado.hpp"
.
- De la implementación de
Lista
(list), sale la implementación dePila
(stack),Cola
(queue) yColaDoble
(deque). - De la implementación de
ArbolBinario
, sale la implementación deArbolBusquedaBinaria
(BST).
El concepto de "Árbol Binario" se tomara como una estructura que reúne nodos con el rango de
En esta estructura se define el concepto de nodo como un espacio de memoria asignado por el compilador al instanciar un objeto ArbolBinario
. Este puede contener datos o no, lo que implica poder construir un árbol de nodos vacíos (en todo los nodos está el valor por defecto del tipo de dato T
definido en la instancia). No puede existir un árbol vacío (sin nodos), ya que para que algo sea considerado un árbol, debe tener por lo menos un nodo. Cuando un árbol tiene un solo nodo, ese único nodo es hoja y raíz al mismo tiempo, es decir, lo que sucede al instanciar por defecto: ArbolBinario<T> arbol{}
.
Esta estructura gestiona por si misma instancias de la clase ArbolBinario
, teniendo en cuenta las siguientes reglas:
Dada una raíz, se tiene que:
- Las claves almacenadas en el subárbol izquierdo de la raíz son menores que la clave de la raíz.
- Las claves almacenadas en el subárbol derecho de la raíz son mayores que la clave de la raíz.
- Todos los subárboles cumplen estas propiedades.
Un árbol de Búsqueda Binaria puede estar vació (sin nodos), puesto que, para ser considerado no vació, el usuario debe insertar un elemento explícitamente
La altura del árbol se cuenta desde
- Hacer que las estructuras se puedan utilizar desde
#include
- Lista
- Pila
- Cola
- Cola Doble
- Arreglo dinámico
- Árbol Binario
- BST
- AVL
- Red-Black
- Heap
- n-Árbol
- Grafo
- Tabla Hash