code: public boolean remove(Predicate<Tree> filter, boolean allOccurences) {
  		Iterator<Tree> i = iterator();
  		boolean removed = false;
  		while (i.hasNext()) {
  			Tree child = i.next();
  			if (filter.test(child)) {
  				i.remove();
  				removed = true;
  				if (!allOccurences) {
  					break;
  				}
  			}
  		}
  		return removed;
  	}
docs: Removes all of the sub-nodes of this node that satisfy the given
  predicate. Sample code:<br>
  <br>
  boolean found = node.remove((child) -&gt; {<br>
  return child.getName().startsWith("a");<br>
  }, true);
  
  @param filter
  predicate which returns {@code true} for node to be removed
  @param allOccurences
  removes all ({@code true}) or just the first ({@code false})
  occurence(s)
  
  @return {@code true} if any sub-nodes were removed