Skip to content

Instantly share code, notes, and snippets.

@earlonrails
Created May 7, 2018 00:22
Show Gist options
  • Save earlonrails/ed1076c29d588facce4cfdf481c31fd3 to your computer and use it in GitHub Desktop.
Save earlonrails/ed1076c29d588facce4cfdf481c31fd3 to your computer and use it in GitHub Desktop.

Revisions

  1. earlonrails created this gist May 7, 2018.
    61 changes: 61 additions & 0 deletions bft.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    #!/usr/bin/env ruby
    def bft(root)
    buffer = ""
    curr_level = 1
    root[:level] = curr_level
    q = [root]

    while(q.any?) do
    node = q.shift
    if (node[:level] > curr_level)
    curr_level += 1
    buffer << "\n"
    end
    buffer << node[:value]

    if node[:left]
    node[:left][:level] = node[:level] + 1
    q << node[:left]
    end
    if node[:right]
    node[:right][:level] = node[:level] + 1
    q << node[:right]
    end
    end

    buffer
    end

    require 'minitest/autorun'

    describe 'bft' do
    before do
    @tree = {
    root: {
    value: "2",
    left: {
    value: "3",
    left: {
    value: "1"
    }
    },
    right: {
    value: "4",
    left: {
    value: "2"
    },
    right: {
    value: "5"
    }
    }
    }
    }
    end

    describe "#bft" do
    it "should output the tree in levels" do
    results = bft(@tree[:root])
    results.must_equal("2\n34\n125")
    end
    end
    end