docs: public Optional<? extends TrieNode> getChild(char token) {
      NodeData data = getData();
      int min = data.firstChildIndex;
      int max = data.firstChildIndex + data.numberOfChildren - 1;
      while (min <= max) {
        int i = (min + max) / 2;
        TrieNode node = new TrieNode(this.trie, i, TrieNode.this);
        char c = node.getChar();
        int compare = Character.compare(c, token);
        if (c < token) {
          // node.getChar() < token
          min = i + 1;
        }
        else if (c > token) {
          // node.getChar() > token
          max = i - 1;
        }
        else {
          return Optional.of(node);
        }
      }
      //assert !getChildren().keywords(x -> x.getChar() == token).findFirst().isPresent();
      return Optional.empty();
    }