Mega Code Archive

 
Categories / Ruby / Collections
 

Loop through a tree

class Tree   attr_reader :value   def initialize(value)     @value = value     @children = []   end   def <<(value)     subtree = Tree.new(value)     @children << subtree     return subtree   end   def each     yield value     @children.each do |child_node|       child_node.each { |e| yield e }     end   end end t = Tree.new("Parent") puts child1 = t << "Child 1" puts child1 << "Grandchild 1.1" puts child1 << "Grandchild 1.2" puts child2 = t << "Child 2" puts child2 << "Grandchild 2.1" t.each { |x| puts x } # Parent # Child 1 # Grandchild 1.1 # Grandchild 1.2 # Child 2 # Grandchild 2.1