code: public Node getBestSuggestions(String prefix) {
          if(prefix.isEmpty())
              throw new IllegalArgumentException();
          int i = 0;
          Node n = root;
          while(n != null) {
              if(prefix.charAt(i) < n.firstChar)
                  n = n.left;
              else if(prefix.charAt(i) > n.firstChar)
                  n = n.right;
              else{
                  for(i++; i < n.charEnd && i < prefix.length(); i++) {
                      if(prefix.charAt(i) != n.suggestion.charAt(i))
                          return null;
                  }
                  if(i < prefix.length())
                      n = n.mid;
                  else
                      return n;
              }
          }
          return null;
      }
docs: Returns the node with the top <i>k</i> highest weighted suggestions in
  this tree that start with the specified prefix, or returns {@code null}
  if the tree contains no suggestion with the prefix.
  @throws IllegalArgumentException if the specified prefix is an empty
  string
  @throws NullPointerException if the specified prefix is {@code null}