Asi es, y la mejor forma es guardar el cache en un campo de la base de datos, asi en tu ABM si agragas mandas llamar al metodo reconstruirArbol y ya vuelves a generar el cache.
Tu funcion no es recursiva ya que no checa si un nodo hijo es padre para volver a llamarse y obtener los hijos
Saludos.