The 'and recurse' part is obviously connected with fact that we are not using the typical transform where we visit the `tree.operand` first.  But it does not jump out.  What happens for `++(a+b)`?