docs: public String max(BinaryTree<String> tree)  {
          return tree.match(new BinaryTree.MatchBlock<String, String>() {
             @Override
             public String _case(Node<String> x) {
                 final String maxLeft = max(x.left);
                 final String maxRight = max(x.right);
  
                 return maxString(maxString(maxLeft, maxRight), x.value);
             }
  
             @Override
             public String _case(EmptyTree<String> x) {
                return null;
             }
          });
       }