Report abuse

diff --git a/lib/puppet/simple_graph.rb b/lib/puppet/simple_graph.rb
index dacea1a..c064a1d 100644
--- a/lib/puppet/simple_graph.rb
+++ b/lib/puppet/simple_graph.rb
@@ -95,7 +95,7 @@ class Puppet::SimpleGraph

         # Look up the adjacencies for a given vertex.
         def vertex_adjacencies(direction, vertex)
-            @adjacencies[direction][vertex] ||= Set.new
+            @adjacencies[direction][vertex] ||= []
             @adjacencies[direction][vertex]
         end
     end
@@ -374,23 +374,12 @@ class Puppet::SimpleGraph
     end

     # Just walk the tree and pass each edge.
-    def walk(source, direction)
-        # Use an iterative, breadth-first traversal of the graph. One could do
-        # this recursively, but Ruby's slow function calls and even slower
-        # recursion make the shorter, recursive algorithm cost-prohibitive.
-        stack = [source]
-        seen = Set.new
-        until stack.empty?
-            node = stack.shift
-            next if seen.member? node
-            connected = adjacent(node, :direction => direction)
-            connected.each do |target|
-                yield node, target
-            end
-            stack.concat(connected)
-            seen << node
+    def walk(source, direction, &block)
+        adjacent(source, :direction => direction).each do |target|
+            yield source, target
+            walk(target, direction, &block)
         end
-    end
+    end 

     # A different way of walking a tree, and a much faster way than the
     # one that comes with GRATR.