code: public static <V> Node<V> findNode(Node<V> parent, Predicate<Node<V>> predicate) {
          checkArgNotNull(predicate, "predicate");
          if (parent != null) {
              if (predicate.apply(parent)) return parent;
              if (hasChildren(parent)) {
                  Node<V> found = findNode(parent.getChildren(), predicate);
                  if (found != null) return found;
              }
          }
          return null;
      }
docs: Returns the first node underneath the given parent for which the given predicate evaluates to true.
  If parent is null or no node is found the method returns null.
  
  @param parent    the parent Node
  @param predicate the predicate
  @return the Node if found or null if not found