code: protected KdTree.Node computeBranch(List<P> points, GrowQueue_I32 indexes)
  	{
  		// declare storage for the split data
  		List<P> left = new ArrayList<>(points.size()/2);
  		List<P> right = new ArrayList<>(points.size()/2);
  		GrowQueue_I32 leftIndexes,rightIndexes;
  
  		if( indexes == null ) {
  			leftIndexes = null; rightIndexes = null;
  		} else {
  			leftIndexes = new GrowQueue_I32(points.size()/2);
  			rightIndexes = new GrowQueue_I32(points.size()/2);
  		}
  
  		// perform the splitting
  		splitter.splitData(points,indexes,left,leftIndexes,right,rightIndexes);
  
  		// save the results into the current node and its children
  		KdTree.Node node = memory.requestNode();
  
  		node.split = splitter.getSplitAxis();
  		node.point = splitter.getSplitPoint();
  		node.index = splitter.getSplitIndex();
  
  		// Compute the left and right children
  		node.left = computeChild(left,leftIndexes);
  		// free memory
  		left = null; leftIndexes = null;
  		node.right = computeChild(right,rightIndexes);
  
  		return node;
  	}
docs: Given the data inside this particular node, select a point for the node and
  compute the node's children
  
  @return The node associated with this region