code: private boolean searchNearest(final double[] target, double maxDistance, NnData<double[]> result) {
  		if (root == null) {
  			return false;
  		}
  
  		double tau = maxDistance;
  		final FastQueue<Node> nodes = new FastQueue<Node>(20, Node.class, false);
  		nodes.add(root);
  		result.distance = Double.POSITIVE_INFINITY;
  		boolean found = false;
  
  		while (nodes.size() > 0) {
  			final Node node = nodes.getTail();
  			nodes.removeTail();
  			final double dist = distance(items[node.index], target);
  
  			if (dist <= tau && dist < result.distance) {
  				result.distance = dist;
  				result.index = indexes.data[node.index];
  				result.point = items[node.index];
  				tau = dist;
  				found = true;
  			}
  
  			if (node.left != null && dist - tau <= node.threshold) {
  				nodes.add(node.left);
  			}
  
  			if (node.right != null && dist + tau >= node.threshold) {
  				nodes.add(node.right);
  			}
  		}
  
  		return found;
  	}
docs: Equivalent to the above search method to find one nearest neighbor.
  It is faster as it does not need to allocate and use the heap data structure.
  @param target target point
  @param maxDistance maximum distance
  @param result information about the nearest point (output parameter)
  @return true if a nearest point was found within maxDistance