code: private Node chooseLeaf(Node node, Point point)
    {
      node.addToBitmapIndex(point);
  
      if (node.isLeaf()) {
        return node;
      }
  
      double minCost = Double.POSITIVE_INFINITY;
      Node optimal = node.getChildren().get(0);
      for (Node child : node.getChildren()) {
        double cost = RTreeUtils.getExpansionCost(child, point);
        if (cost < minCost) {
          minCost = cost;
          optimal = child;
        } else if (cost == minCost) {
          // Resolve ties by choosing the entry with the rectangle of smallest area
          if (child.getArea() < optimal.getArea()) {
            optimal = child;
          }
        }
      }
  
      return chooseLeaf(optimal, point);
    }
docs: This description is from the original paper.
  
  Algorithm ChooseLeaf. Select a leaf node in which to place a new index entry E.
  
  CL1. [Initialize]. Set N to be the root node.
  
  CL2. [Leaf check]. If N is a leaf, return N.
  
  CL3. [Choose subtree]. If N is not a leaf, let F be the entry in N whose rectangle
  FI needs least enlargement to include EI. Resolve ties by choosing the entry with the rectangle
  of smallest area.
  
  CL4. [Descend until a leaf is reached]. Set N to be the child node pointed to by Fp and repeated from CL2.
  
  @param node  - current node to evaluate
  @param point - point to insert
  
  @return - leafNode where point can be inserted