docs: protected void adjustTree(IndexTreePath<E> subtree) {
      final Logging log = getLogger();
      if(log.isDebugging()) {
        log.debugFine("Adjust tree " + subtree);
      }
  
      // get the root of the subtree
      N node = getNode(subtree.getEntry());
  
      // overflow in node
      if(hasOverflow(node)) {
        // treatment of overflow: reinsertion or split
        N split = overflowTreatment(node, subtree);
  
        // node was split
        if(split != null) {
          // if root was split: create a new root that points the two
          // split nodes
          if(isRoot(node)) {
            IndexTreePath<E> newRootPath = createNewRoot(node, split);
            height++;
            adjustTree(newRootPath);
          }
          // node is not root
          else {
            // get the parent and add the new split node
            N parent = getNode(subtree.getParentPath().getEntry());
            if(log.isDebugging()) {
              log.debugFine("parent " + parent);
            }
            parent.addDirectoryEntry(createNewDirectoryEntry(split));
  
            // adjust the entry representing the (old) node, that has
            // been split
  
            // This does not work in the persistent version
            // node.adjustEntry(subtree.getEntry());
            node.adjustEntry(parent.getEntry(subtree.getIndex()));
  
            // write changes in parent to file
            writeNode(parent);
            adjustTree(subtree.getParentPath());
          }
        }
      }
      // no overflow, only adjust parameters of the entry representing the
      // node
      else {
        if(!isRoot(node)) {
          N parent = getNode(subtree.getParentPath().getEntry());
          E entry = parent.getEntry(subtree.getIndex());
          boolean changed = node.adjustEntryIncremental(entry, lastInsertedEntry);
          if(changed) {
            // node.adjustEntry(parent.getEntry(index));
            // write changes in parent to file
            writeNode(parent);
            adjustTree(subtree.getParentPath());
          }
        }
        // root level is reached
        else {
          node.adjustEntry(getRootEntry());
        }
      }
    }