docs: private void adjustTree(Node n, Node nn)
    {
      // special case for root
      if (n == root) {
        if (nn != null) {
          root = buildRoot(false);
          root.addChild(n);
          root.addChild(nn);
        }
        root.enclose();
        return;
      }
  
      boolean updateParent = n.enclose();
  
      if (nn != null) {
        nn.enclose();
        updateParent = true;
  
        if (splitStrategy.needToSplit(n.getParent())) {
          Node[] groups = splitStrategy.split(n.getParent());
          adjustTree(groups[0], groups[1]);
        }
      }
  
      if (n.getParent() != null && updateParent) {
        adjustTree(n.getParent(), null);
      }
    }