Skip to content

Instantly share code, notes, and snippets.

@earlonrails
Last active May 11, 2018 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save earlonrails/947109f6185a428d3fb62f80b9c67d03 to your computer and use it in GitHub Desktop.
Save earlonrails/947109f6185a428d3fb62f80b9c67d03 to your computer and use it in GitHub Desktop.
DFS traversal and BFS Traversal in Ruby
#!/usr/bin/env ruby
require 'pry'
class Node
attr_accessor :val, :left, :right
def initialize(val, left = nil, right = nil)
@val = val
@left = left
@right = right
end
class << self
def dfs(node, results = [])
if node
results << node.val
dfs(node.left, results)
dfs(node.right, results)
end
return results
end
def bft(node)
results = []
queue = [node]
while queue.any? do
curr = queue.shift
return results unless curr
results << curr.val
queue = queue + [curr.left, curr.right]
end
results
end
end
end
require 'minitest/autorun'
describe Node do
before do
@root = Node.new(0)
@root.left = Node.new(1)
@root.right = Node.new(2)
@root.left.left = Node.new(3)
@root.left.right = Node.new(4)
@root.right.left = Node.new(5)
@root.right.right = Node.new(6)
end
describe 'dfs' do
it "should traverse the tree" do
result = Node.dfs(@root)
result.must_equal([0,1,3,4,2,5,6])
end
end
describe 'bft' do
it "should traverse the tree" do
result = Node.bft(@root)
result.must_equal([0,1,2,3,4,5,6])
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment