Commit 083ac9b

mo khan <mo@mokhan.ca>
2013-09-05 03:58:59
add depth first search and breadth first search.
1 parent 130be5b
spec/data_structures/breadth_first_search_spec.rb
@@ -0,0 +1,27 @@
+require "spec_helper"
+require "ostruct"
+
+def bfs(node)
+  queue = []
+  queue.push({:node => node, :level => 0})
+  until (queue.empty?) do
+    top = queue.shift
+    p "#{top[:level]} #{top[:node].name}"
+    queue.push({:node => top[:node].left, :level => top[:level]+1}) if top[:node].left
+    queue.push({:node => top[:node].right, :level => top[:level]+1}) if top[:node].right
+  end
+end
+
+describe "bfs" do
+  it "should visit each item" do
+    nailah = OpenStruct.new(:name => "nini", :left => nil, :right => nil)
+    adia = OpenStruct.new(:name => "adia", :left => nil, :right => nil)
+    allison = OpenStruct.new(:name => "alli", :left => adia, :right => nailah)
+    caius = OpenStruct.new(:name => "caius", :left => nil, :right => nil)
+    reeves = OpenStruct.new(:name => "reeves", :left => nil, :right => nil)
+    lisa = OpenStruct.new(:name => "lisa", :left => caius, :right => reeves)
+    sandi = OpenStruct.new(:name => "sandi", :left => allison, :right => lisa)
+    bfs(sandi)
+  end
+end
+
spec/data_structures/depth_first_search_spec.rb
@@ -0,0 +1,25 @@
+require "spec_helper"
+require "ostruct"
+
+def dfs(node)
+  stack = [node]
+  until(stack.empty?) do
+    top = stack.pop
+    p top.name
+    stack.push(top.left) if top.left
+    stack.push(top.right) if top.right
+  end
+end
+
+describe "dfs" do
+  it "should visit each item" do
+    nailah = OpenStruct.new(:name => "nini", :left => nil, :right => nil)
+    adia = OpenStruct.new(:name => "adia", :left => nil, :right => nil)
+    allison = OpenStruct.new(:name => "alli", :left => adia, :right => nailah)
+    caius = OpenStruct.new(:name => "caius", :left => nil, :right => nil)
+    reeves = OpenStruct.new(:name => "reeves", :left => nil, :right => nil)
+    lisa = OpenStruct.new(:name => "lisa", :left => caius, :right => reeves)
+    sandi = OpenStruct.new(:name => "sandi", :left => allison, :right => lisa)
+    dfs(sandi)
+  end
+end