+1  A: 

The mirror variable is local to the method, and will ALWAYS be unitialized in each call.

Passing mirror as an argument to the method is a very good option.

EDIT: If you can't modify the method signature, can you create a private method and call that to perform the recursion?

Matthew Blackford
A: 

"I don't think this is possible without passing mirror as an argument into the method or defining it in the class definition... but I want to make sure."

Correct, that would be one way to do what you want, as mirror is not a recursion invariant.

The other way would be that your recursive algorithm clones just nodes, not entire subtrees.

Not Sure
+2  A: 

It's rare to see public recursive functions like that. A better solution might be to have the public method that creates the object, and then calls a private function which is recursive that just makes the necessary changes.

It's generally difficult to have the recursive function signature match what you want to show to your clients.

Uri
A: 

Uri's answer is the best.... refactor it into a private method and simply initialize the mirror then invoke the private (recrsive) method passing mirror as a parameter.

AaronG