Quick review, find a performance and memory issue ...

The code:
    if get_answer
      @node[0,1] = [question, [animal], @node.dup]
    else
      @node[0,1] = [question, @node.dup, [animal]]
    end

is better replace by:
    temp = @node
    if get_answer
      @node[0,1] = [question, [animal], temp]
    else
      @node[0,1] = [question, temp, [animal]]
    end

-- 

David Tran
http://www.doublegifts.com