exercism/ruby/binary-search-tree/binary_search_tree.rb

31 lines
547 B
Ruby
Raw Normal View History

2018-10-10 20:24:56 -04:00
# class Bst
class Bst
attr_reader :data, :left, :right
def initialize(data)
@data = data
end
def insert(data)
data <= @data ? insert_left(data) : insert_right(data)
end
def each(&block)
return enum_for(:each) unless block_given?
@left.each(&block) if left
yield data
@right.each(&block) if right
end
private
def insert_left(data)
@left ? @left.insert(data) : @left = self.class.new(data)
end
def insert_right(data)
@right ? @right.insert(data) : @right = self.class.new(data)
end
end