# 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