Are you sure you need to walk Preorder?  What depends on the exact ordering?  Also, why did you invert the return value of `applyTo`?