code: public Set<Annotation> getSubTreeNodes(@NonNull Annotation node, String... childRelations) {
        Set<Annotation> children = new HashSet<>();
        Set<String> targetRel = childRelations == null ? Collections.emptySet() : Sets.asSet(
           Arrays.asList(childRelations));
        Predicate<RelationEdge> keep = edge -> targetRel.size() == 0 || targetRel.contains(edge.getRelation());
  
        Queue<RelationEdge> queue = new LinkedList<>(getInEdges(node).stream().filter(keep).collect(Collectors.toList()));
        while (!queue.isEmpty()) {
           RelationEdge n = queue.remove();
           if (!"relcl".equals(n.getRelation()) && !"parataxis".equals(n.getRelation())) {
              children.add(n.getFirstVertex());
              queue.addAll(getInEdges(n.getFirstVertex())
                              .stream()
                              .filter(e -> !children.contains(e.getFirstVertex()))
                              .collect(Collectors.toSet()));
           }
        }
        return children;
     }
docs: Gets sub tree nodes.
  
  @param node           the node
  @param childRelations the child relations
  @return the sub tree nodes