docs: public Integer max(IntBinaryTree tree)  {
          return tree.match(new IntBinaryTree.MatchBlock<Integer>() {
             @Override
             public Integer _case(Node x) {
                final Integer maxLeft = max(x.left);
                final int l = maxLeft == null ? Integer.MIN_VALUE : maxLeft;
  
                final Integer maxRight = max(x.right);
                final int r = maxRight == null ? Integer.MIN_VALUE : maxRight;
  
                return Math.max(Math.max(l, r), x.value);
             }
  
             @Override
             public Integer _case(EmptyTree x) {
                return null;
             }
          });
       }