code: public synchronized void insert(Word<I> query, ReuseCapableOracle.QueryResult<S, O> queryResult) {
          insert(query, getRoot(), queryResult);
      }
docs: Inserts the given {@link Word} with {@link ReuseCapableOracle.QueryResult} into the tree starting from the root
  node of the tree. For the longest known prefix of the given {@link Word} there will be no new nodes or edges
  created.
  <p>
  Will be called from the {@link ReuseOracle} if no system state was available for reusage for the query (otherwise
  {@link #insert(Word, ReuseNode, ReuseCapableOracle.QueryResult)} would be called). The last node reached by the
  last symbol of the query will hold the system state from the given {@link ReuseCapableOracle.QueryResult}.
  <p>
  This method should only be invoked internally from the {@link ReuseOracle} unless you know exactly what you are
  doing (you may want to create a predefined reuse tree before start learning).
  
  @throws ReuseException
  if non deterministic behavior is detected