docs: public List<JoinNode> extractSubTrees() {
          List<JoinNode> subTrees = new ArrayList<>();
          // Extract the first sub-tree starting at the root
          subTrees.add(this);
  
          List<JoinNode> leafNodes = new ArrayList<>();
          extractSubTree(leafNodes);
          // Continue with the leafs
          for (JoinNode leaf : leafNodes) {
              subTrees.addAll(leaf.extractSubTrees());
          }
          return subTrees;
      }