docs: @Override
  	public ClusteringTreeNode nearestChild(double[] pointA) {
  		assert (this.projections.size() > 0 &&
  				this.projections.get(0).length == pointA.length);
  		int minBucketProjection = -1;
  		int minSize = Integer.MAX_VALUE;
  		Iterator<double[]> iIterProjections = this.projections.iterator();
  		Iterator<CuckooHashing<List<ClusteringTreeNode>>> iIterBuckets = this.buckets
  				.iterator();
  		int size = this.projections.size();
  		for (int i = 0; i < size; i++) {
  			long bucketNumber = calcBucketNumber(project(pointA,
  					iIterProjections.next()));
  			List<ClusteringTreeNode> currentBucket = iIterBuckets.next().get(
  					bucketNumber);
  			int bucketSize;
  			if (currentBucket != null
  					&& (bucketSize = currentBucket.size()) <= minSize) {
  				minBucketProjection = i;
  				minSize = bucketSize;
  			}
  		}
  		if (minBucketProjection == -1) {
  			return null;
  		}
  
  		long bucketNumber = calcBucketNumber(project(pointA,
  				minBucketProjection));
  		double minDistance = Double.POSITIVE_INFINITY;
  		ClusteringTreeNode min = null;
  		// for (int i = -1; i <= 1; i++) {
  		List<ClusteringTreeNode> currentBucket = this.buckets.get(
  				minBucketProjection).get(bucketNumber);// + i);
  		if (currentBucket != null) {
  			for (ClusteringTreeNode node : currentBucket) {
  				double d = Metric.distance(pointA, node.getCenter());
  				if (d < minDistance) {
  					minDistance = d;
  					min = node;
  				}
  			}
  		}
  		// }
  		return min;
  	}