One class = One header (h) + One source (cpp) seem a better idea in a case of a framework for the end-user.
A Pimpl idiom is not a bad idea for the main classes like the Tree class where a part of the method are for internal engine processing, not for the end-user.