code: public void insert(ClusKernel newPoint, Budget budget, long timestamp) {
          if (breadthFirstStrat){
            	insertBreadthFirst(newPoint, budget, timestamp);
         }
          else{
  	    	Entry rootEntry = new Entry(this.numberDimensions,
  	                root, timestamp, null, null);
  	        ClusKernel carriedBuffer = new ClusKernel(this.numberDimensions);
  	        Entry toInsertHere = insert(newPoint, carriedBuffer, root, rootEntry,
  	                budget, timestamp);
  	
  	        if (toInsertHere != null) {
  	            this.numRootSplits++;
  	            this.height += this.height < this.maxHeight ? 1 : 0;
  	            
  	            Node newRoot = new Node(this.numberDimensions,
  	                    toInsertHere.getChild().getRawLevel() + 1);
  	            newRoot.addEntry(rootEntry, timestamp);
  	            newRoot.addEntry(toInsertHere, timestamp);
  	            rootEntry.setNode(newRoot);
  	            toInsertHere.setNode(newRoot);
  	            this.root = newRoot;
  	        }
          }
  
          this.numberInsertions++;
          if (this.numberInsertions % INSERTIONS_BETWEEN_CLEANUPS == 0) {
              cleanUp(this.root, 0);
          }
      }
docs: Insert a new point in the <code>Tree</code>. The point should be
  represented as a cluster with a single data point(i.e. N = 1). A
  <code>Budget</code> class is also given, which is informed of the number
  of operation the tree does, and informs the tree when it does not have
  time left and should stop the insertion.
  @param newPoint The point to be inserted.
  @param budget The budget and statistics recollector for the insertion.
  @param timestamp The moment at which this point is inserted.
  @see Kernel
  @see Budget