docs: private void preInsert(MkMaxEntry q, MkMaxEntry nodeEntry, KNNHeap knns_q) {
      if (LOG.isDebugging()) {
        LOG.debugFine("preInsert " + q + " - " + nodeEntry + "\n");
      }
  
      double knnDist_q = knns_q.getKNNDistance();
      MkMaxTreeNode<O> node = getNode(nodeEntry);
      double knnDist_node = 0.;
  
      // leaf node
      if (node.isLeaf()) {
        for (int i = 0; i < node.getNumEntries(); i++) {
          MkMaxEntry p = node.getEntry(i);
          double dist_pq = distance(p.getRoutingObjectID(), q.getRoutingObjectID());
  
          // p is nearer to q than the farthest kNN-candidate of q
          // ==> p becomes a knn-candidate
          if (dist_pq <= knnDist_q) {
            knns_q.insert(dist_pq, p.getRoutingObjectID());
            if (knns_q.size() >= getKmax()) {
              knnDist_q = knns_q.getKNNDistance();
              q.setKnnDistance(knnDist_q);
            }
          }
          // p is nearer to q than to its farthest knn-candidate
          // q becomes knn of p
          if (dist_pq <= p.getKnnDistance()) {
            KNNList knns_p = knnq.getKNNForDBID(p.getRoutingObjectID(), getKmax() - 1);
  
            if (knns_p.size() + 1 < getKmax()) {
              p.setKnnDistance(Double.NaN);
            } else {
              double knnDist_p = Math.max(dist_pq, knns_p.getKNNDistance());
              p.setKnnDistance(knnDist_p);
            }
          }
          knnDist_node = Math.max(knnDist_node, p.getKnnDistance());
        }
      }
      // directory node
      else {
        List<DoubleIntPair> entries = getSortedEntries(node, q.getRoutingObjectID());
        for (DoubleIntPair distEntry : entries) {
          MkMaxEntry dirEntry = node.getEntry(distEntry.second);
          double entry_knnDist = dirEntry.getKnnDistance();
  
          if (distEntry.second < entry_knnDist || distEntry.second < knnDist_q) {
            preInsert(q, dirEntry, knns_q);
            knnDist_q = knns_q.getKNNDistance();
          }
          knnDist_node = Math.max(knnDist_node, dirEntry.getKnnDistance());
        }
      }
      if (LOG.isDebugging()) {
        LOG.debugFine(nodeEntry + "set knn dist " + knnDist_node);
      }
      nodeEntry.setKnnDistance(knnDist_node);
    }