Commit 9f8f967
Changed files (3)
spec
traversal
lib/in_order_traversal.rb
@@ -1,7 +1,7 @@
class InOrderTraversal
def traverse(node, visitor)
- node.left.accept(visitor, self) if node.left
+ visitor.visit(node.left) if node.left
visitor.visit(node)
- node.right.accept(visitor, self) if node.right
+ visitor.visit(node.right) if node.right
end
end
spec/traversal/in_order_traversal_spec.rb
@@ -0,0 +1,27 @@
+require "spec_helper"
+
+describe "inorder traversal" do
+ let(:sut) { InOrderTraversal.new }
+ let(:node) { double }
+ let(:left_node) { double }
+ let(:right_node) { double }
+ let(:visitor) { double('visitor', :visit => nil) }
+
+ before :each do
+ node.stub(:left).and_return(left_node)
+ node.stub(:right).and_return(right_node)
+ sut.traverse(node, visitor)
+ end
+
+ it "should visit the left node first" do
+ visitor.should have_received(:visit).with(left_node)
+ end
+
+ it "should visit the current node second" do
+ visitor.should have_received(:visit).with(node)
+ end
+
+ it "should visit the right node last" do
+ visitor.should have_received(:visit).with(right_node)
+ end
+end
spec/spec_helper.rb
@@ -1,4 +1,6 @@
require 'benchmark'
+require_relative '../lib/in_order_traversal'
+
require_relative '../lib/sorting/bubble_sort'
require_relative '../lib/sorting/insertion_sort'
require_relative '../lib/sorting/quick_sort'