Installation: gem install binary_search_tree
Info: This gem implements the two classes BinarySearchTree and BinarySearchTreeHash. BinarySearchTree is a self balancing avl tree.
Most people will only need to be concerned with BinarySearchTreeHash as it is a wrapper over BinarySearchTree that provides the same interface as the native Ruby hash. This class is useful when you want a container that provides fast lookups with minimal memory footprint. Since it is self balancing, it will reorganize itself on every new insert to make subsequent lookups optimal.
–Example usage of BinarySearchTreeHash–
ruby-1.9.2> h = BinarySearchTreeHash.new logger (note: passing a logger is optional)
=> {}
ruby-1.9.2> (1..100).each{|i| h = i*1000} ruby-1.9.2> h
DEBUG - [03/May/2011 15:02:07] "find operation completed in 7 lookups..."
=> 45000
ruby-1.9.2> h
DEBUG - [03/May/2011 15:02:14] "find operation completed in 6 lookups..."
=> 77000
ruby-1.9.2> h
DEBUG - [03/May/2011 15:02:18] "find operation completed in 2 lookups..."
=> 32000
ruby-1.9.2> h.delete 32
DEBUG - [03/May/2011 15:02:29] "find operation completed in 2 lookups..."
ruby-1.9.2> h
DEBUG - [03/May/2011 15:02:58] "find operation completed in 8 lookups..."
=> nil
ruby-1.9.2> h = 7777
=> 7777
ruby-1.9.2> h
DEBUG - [03/May/2011 15:03:33] "find operation completed in 7 lookups..."
=> 7777
ruby-1.9.2> h.size
=> 100
ruby-1.9.2> h.delete 50
DEBUG - [03/May/2011 15:03:48] "find operation completed in 6 lookups..."
ruby-1.9.2> h.size
=> 99
–Example usage of BinarySearchTree (only use this if you want something lower level)–
ruby-1.9.2> b = BinarySearchTree.new logger (note: passing a logger is optional) ruby-1.9.2> b.insert 45, 78 ruby-1.9.2> b.insert 23, 5 ruby-1.9.2> b.insert 77, 999 ruby-1.9.2> b.insert 43, 999 ruby-1.9.2> b.find(23).value
DEBUG - [03/May/2011 15:23:15] "find operation completed in 2 lookups..."
=> 5
ruby-1.9.2> b.find(24)
DEBUG - [03/May/2011 15:23:32] "find operation completed in 4 lookups..."
=> nil
ruby-1.9.2> b.find(43).value
DEBUG - [03/May/2011 15:23:40] "find operation completed in 3 lookups..."
=> 999
ruby-1.9.2> b.max.value
=> 999
ruby-1.9.2> b.min.value
=> 5
ruby-1.9.2> b.size
=> 4
ruby-1.9.2> b.remove 23
DEBUG - [03/May/2011 15:24:41] "find operation completed in 2 lookups..."
ruby-1.9.2> b.size
=> 3
ruby-1.9.2> b.clear
=> 0
ruby-1.9.2> b.size
=> 0