I am writing a tree editor.  The algorithm for displaying a node is
recursive.  On leaf nodes, it's trivial.  Branches need to display all
their kids.

I would like to implement this with three classes:  the Leaf, the
Branch, and the Node.  Leaf & Branch are subclasses of Node.

The problem:  nodes are mutable.  You can add a kid to a node.  If that
node's a Leaf, it needs to become a Branch.

I can think of three solutions.

 - Add a wrapper object around every Node, and give it a #replace
   method.

 - Use Object#become from evil.rb.

 - Represent nodes and leaves as instances of the same class, and use if
   statements.

I'd like #2 the best if evil.pb wasn't likely to win awards for being
the nastiest hack of all time.  (Props to the authors!)  I don't like #1
or #3, but if I had to choose, I'd go with #3.

Making nodes non-mutable would be annoying and unintuitive, I think.

What would you do?