// used by tests
 protected void forceTreeSplit(int depth) {
   if (depth <= treeRoot.maxNodeDepth && this.depth < depth) {
     split();
     for (AbstractQuadTreeNode<E> child : children) {
       child.forceTreeSplit(depth);
     }
   }
 }
  /**
   * Ajoute tous les éléments à cette node. Split si besoin.
   *
   * @param elementsToAdd Les éléments à ajouter
   * @return
   */
  public boolean addAll(Collection<? extends E> elementsToAdd) {
    this.elements.addAll(elementsToAdd);

    if (this.depth < treeRoot.maxNodeDepth && this.elements.size() > treeRoot.maxElementsPerNode) {
      split();
    }

    return true;
  }
  /**
   * Ajoute un élément dans cet arbre. <b>Attention</b> méthode lourde. Préférer <code>addAll()
   * </code> pour ajouter une grande quantité de données.
   *
   * @param e L'élément à ajouter
   * @return true
   */
  public boolean add(E e) {
    if (e == null) {
      throw new NullPointerException("Elements can't be null.");
    } else if (isInbounds(e)) {
      if (children == null || !canBePushedDown(e)) {
        if (this.depth < treeRoot.maxNodeDepth
            && this.elements.size() + 1 > treeRoot.maxElementsPerNode) {
          this.elements.add(e);
          split();
        } else {
          this.elements.add(e);
        }
      } else {
        children.get(getElementZone(e)).add(e);
      }
    } else {
      throw new IllegalArgumentException("Out of bounds");
    }

    return true;
  }