class Node
attr_accessor :value, :left, :right
def initialize(value=nil, left=nil, right=nil)
@value, @left, @right = value, left, right
end
end
def generate(n)
if n == 0
yield Node.new(n, nil, nil)
else
for this in 1..n
for left in generate(this-1)
for right in generate(n-this)
yield(Node.new(this, left, right))
end
end
end
end
end
# example use
generate(2) {|t| treeprint(t) }