Ok in looking at this closer, you're right, the recurseNodeWith(Pre)Operation() only uses the return value to prevent recursion of as of yet un-recursed children. There are some operations that also want to stop recursion completely when they've completed their work, and they accomplish this by using a shared "found" or "termination" marker in their ExtraData struct..., it doesn't immediately terminate the recursion and unwind, but it does allow future peer levels to terminate deeper recursion...

So, if you implement the solution like you've described allowing "the result of the operation not bubble up, and only terminate the visitation of the remaining child voxels." then we can get the same optimization by allowing operation functions to short circuit the remaining tree recursion in a similar manner as the prefix approach.

Let's not add an enum for now, although that's also an interesting idea..