# See: http://www.bennadel.com/blog/2062-Seven-Languages-In-Seven-Weeks-Ruby-Day-2.htm # # 2010-11-22 (Elliott Sprehn) class Tree attr_accessor :children attr_accessor :name def initialize(data, name=nil) @name = name @children = data.map { |k, v| Tree.new(v, k) } end def visit(&block) yield self if @name @children.each { |v| v.visit(&block) } end end tree = Tree.new( { "grandpa" => { "dad" => { "child1" => {}, "child2" => {} }, "uncle" => { "child3" => {}, "child4" => {} } } } ) tree.visit { |node| puts "Visiting #{node.name}" }