Lo que realiza este programa es que al ingresar un árbol en una función binaria, no nos aseguramos que el árbol este balanceado por ejemplo el ingreso de estos números en este orden:
12,1,5,21,25,2,0,32,37,199,500,322,0
Nos genera un árbol de está manera:
Por lo tanto lo que se hace es realizar un recorrido de un binario, en este caso use el preorden, y mande cada dato a una función que genere un árbol AVL por lo tanto nos quedaría de esta manera.
El recolector de basura lo que haces es que al terminarse los nodos disponibles (con simbolo "+") en el anillo buscar a todos los nodos en mi caso puestos con un simbolo "#" que me indica que ya no lo uso para unirlos de nuevo al anillo de bloques y seguir trabajando.
En este ejmplo se ve que las casillas con símbolos "-" no se unen ya que estas aun están siendo usadas dentro del programa.
y los que están con símbolo "+" ya fueron unidos al anillo de bloques que antes estaban con el símbolo "#" que significaba que ya eran basura.
Es este video se muestra el funcionamiento básico del programa... El diseño del programa esta hecho con un char de 13 espacios el cual lo imprimo y le doy la apariencia que tiene, los datos que se ingresan son manejados a nivel de nodos que están unidos en una matriz.