code: private int findOptimalNodeOrder(final Node<K, V> node) {
  		int low = MIN_B_ORDER; // minimal b-order
  		int high = (blockSize / node.getStructEstimateSize(1)) << 2; // estimate high b-order
  
  		while (low <= high) {
  			int mid = ((low + high) >>> 1);
  			mid += (1 - (mid % 2));
  			int nodeSize = node.getStructEstimateSize(mid);
  
  			if (log.isDebugEnabled()) {
  				log.debug(this.getClass().getName() + "::findOptimalNodeOrder(" + node.getClass().getName()
  						+ ") blockSize=" + blockSize + " nodeSize=" + nodeSize + " b_low=" + low
  						+ " b_order=" + mid + " b_high=" + high);
  			}
  
  			if (nodeSize < blockSize) {
  				low = mid + 2;
  			} else if (nodeSize > blockSize) {
  				high = mid - 2;
  			} else {
  				return mid;
  			}
  		}
  		return low - 2;
  	}
docs: Find b-order for a blockSize of this tree
  
  @param node of type Leaf or Integernal
  @return integer with b-order