public ClusterTree topDown(){
		Instance instance = null;
		Cluster c = this.beginTopDown(), caux, caux2 = new Cluster();
		double maxDistance, daux = 0;
		int index = 0, numIteracionesQueFaltan = this.instances.numInstances();
		int iteraciones = numIteracionesQueFaltan;
		
		System.out.println("Iteracion 1 de " + iteraciones + ".");
		ClusterTree cTree = new ClusterTree(0, c); // Creamos el arbol poniendo como raiz el cluster inicial y la distancia como cero.
		
		while (numIteracionesQueFaltan > 1) { // Sabemos que empezamos con un unico cluster y acabaremos con el numero de instancias.
			System.out.println("Iteracion " + (iteraciones - numIteracionesQueFaltan + 2) + " de " + iteraciones + ".");
			
			maxDistance = 0; // Infinito.
			for (int i = 0; i < c.size(); i++) { // Recorremos el cluster principal.
				instance = c.get(i); // Cogemos la instancia actual.
				caux = new Cluster(instance); // La metemos en un cluster temporal.
				caux2 = c.rest(i); // Guardamos en un cluster temporal, el resto del cluster principal quitando la instancia actual.
				daux = this.link.calculateClusterDistance(caux, caux2); // Comprobamos la distancia entre el nuevo cluster con la unica instancia, con el cluster principal sin dicha instancia.
				if (daux > maxDistance) { // Si la distancia es la maxima, guardamos los datos necesarios para saber cual es la instancia a quitar.
					maxDistance = daux;
					index = i; // Posicion de la instancia a quitar.
				}
			}
			caux = new Cluster(c.get(index)); // Nuevo cluster con la instancia.
			c = c.rest(index); // Eliminamos la instancia del cluster principal.
			cTree.addClusterNode(maxDistance, caux); // Anadimos el nuevo cluster al arbol.
			cTree.addClusterNode(maxDistance, c); // Anadimos lo que queda del cluster principal al arbol.
			numIteracionesQueFaltan--; // Una iteracion menos.
			
		}
		return cTree;
	}