# binary search tree of values like Java's TreeSet class Tree def initialize @overall_root = nil end def insert(v) @overall_root = insert_helper(v, @overall_root) end def each inorder_helper(@overall_root) {|n| yield n} end def print for i in self puts i end end private class Node def initialize(data = nil, left = nil, right = nil) @data = data @left = left @right = right end attr_reader :data, :left, :right attr_writer :data, :left, :right end def insert_helper(v, root) if root == nil root = Node.new(v) elsif v < root.data root.left = insert_helper(v, root.left) else root.right = insert_helper(v, root.right) end return root end def inorder_helper(root) if root inorder_helper(root.left) {|n| yield n} yield root.data inorder_helper(root.right) {|n| yield n} end end end