|  
Goal:
 
  |  
   /* ========================================================
      Insert  (x, RSub(x)) into the internal node N of B+-tree
      ======================================================== */
   InsertInternal( x, rx, N )
   {
      if ( N ≠ full )
      {
         Shift keys to make room for x
	 insert (x, rx) into its position in N
	 return          // Done
      }
      else
      {
         /* -------------------------------------------
	    Internal node N has: n keys + n+1 node ptrs:
	    
	       N: |p1|k1|p2|k2|....|pn|kn|pn+1|
	    ------------------------------------------- */
         Make the following virtual node 
	      by inserting x,rx in N:    
	     |p1|k1|p2|k2|...|x|rx|...|pn|kn|pn+1|
	     (There are (n+2) pointers in this node !!!)
	 Split this node into 3 parts: 
	     1.  Take the middle key out
	     2.  L = the "left"  half (use the old node to do this)
	     3.  R = the "right" half (create a new node to do this)
	      
 |