Rather that cite definitions of the terms I'd like to give my personal view of what these things are.
Reverse Engineering is the process of taking an output and and figuring out what the input was. It also means tracing the steps that a piece of information took from it being inputted up until it is outputted. Think of this as figuring out things work without having the source but a level of abstraction just above the machine. When it comes to software, reverse engineering tends to be the process of debugging the running code of an application in assembly as it runs. Watching it run, following the process it takes, allows you to trace the steps and reassemble them yourself into something meaningful you can use yourself.
Binary exploitation is the process of abusing subtle (or perhaps not-so-subtle) flaws in software to make an application performs functions that it wasn't design to perform. While it's not impossible to exploit flaws in binaries without doing reverse engineering, I would argue that almost all binary exploitation exercises begin with reverse engineering to understand how the application works and to help identify the flaws.