code: private <R> void visit(String prefix, Visitor<T, R> visitor,
              RadixTreeNode<T> parent, RadixTreeNode<T> node) {
          
      	int numberOfMatchingCharacters = node.getNumberOfMatchingCharacters(prefix);
  
          // if the node key and prefix match, we found a match!
          if (numberOfMatchingCharacters == prefix.length() && numberOfMatchingCharacters == node.getKey().length()) {
              visitor.visit(prefix, parent, node);
          } else if (node.getKey().equals("") == true // either we are at the
                  // root
                  || (numberOfMatchingCharacters < prefix.length() && numberOfMatchingCharacters >= node.getKey().length())) { // OR we need to
              // traverse the childern
              String newText = prefix.substring(numberOfMatchingCharacters, prefix.length());
              for (RadixTreeNode<T> child : node.getChildern()) {
                  // recursively search the child nodes
                  if (child.getKey().startsWith(newText.charAt(0) + "")) {
                      visit(newText, visitor, node, child);
                      break;
                  }
              }
          }
      }
docs: recursively visit the tree based on the supplied "key". calls the Visitor
  for the node those key matches the given prefix
  
  @param prefix
  The key o prefix to search in the tree
  @param visitor
  The Visitor that will be called if a node with "key" as its
  key is found
  @param node
  The Node from where onward to search