what is the purpose of these defines?
isn't something like `bool collapseEmptyTrees = false` clear enough? Some of these seem unnecessarily redundant.