docs: public void insert(E entry, boolean withPreInsert) {
      final Logging log = getLogger();
      if(log.isDebugging()) {
        log.debugFine("insert " + entry.getRoutingObjectID());
      }
  
      if(!initialized) {
        initialize(entry);
      }
  
      // choose subtree for insertion
      IndexTreePath<E> subtree = settings.insertStrategy.choosePath(this, entry);
      if(log.isDebugging()) {
        log.debugFine("insertion-subtree " + subtree);
      }
  
      // determine parent distance
      E parentEntry = subtree.getEntry();
      entry.setParentDistance(distance(parentEntry.getRoutingObjectID(), entry.getRoutingObjectID()));
  
      // create leaf entry and do pre insert
      if(withPreInsert) {
        preInsert(entry);
      }
  
      // get parent node
      N parent = getNode(parentEntry);
      parent.addLeafEntry(entry);
      writeNode(parent);
  
      // adjust the tree from subtree to root
      adjustTree(subtree);
  
      // test
      if(EXTRA_INTEGRITY_CHECKS) {
        getRoot().integrityCheck(this, getRootEntry());
      }
    }