Last active
August 29, 2015 14:01
-
-
Save kyledcline/415b2b133a8c1bc3fbd2 to your computer and use it in GitHub Desktop.
Revisions
-
kyledcline revised this gist
May 18, 2014 . 1 changed file with 35 additions and 33 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,8 +8,10 @@ def initialize(root=nil, *keys) build_tree(*keys) unless keys.empty? end def ordered_keys @ordered_keys = [] traverse @ordered_keys end def find(value) @@ -26,39 +28,39 @@ def find(value) false end private def build_tree(*key_values) key_values.each { |key| insert_node(key) } end def insert_node(value) node = root until node.nil? if node.key > value && node.left node = node.left elsif node.key < value && node.right node = node.right elsif node.key > value node.left = Node.new(value) return value elsif node.key < value node.right = Node.new(value) return value elsif node.key == value return value end end end def add_key(node_key) @ordered_keys << node_key end def traverse(node=@root) return if node.nil? traverse(node.left) add_key(node.key) traverse(node.right) end end -
kyledcline created this gist
May 18, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,64 @@ class BinarySearchTree Node = Struct.new(:key, :left, :right) attr_reader :root def initialize(root=nil, *keys) @root = Node.new(root) build_tree(*keys) unless keys.empty? end def build_tree(*key_values) key_values.each { |key| insert_node(key) } end def find(value) node = root until node.nil? if node.key > value node = node.left elsif node.key < value node = node.right elsif node.key == value return true end end false end def insert_node(value) node = root until node.nil? if node.key > value && node.left node = node.left elsif node.key < value && node.right node = node.right elsif node.key > value node.left = Node.new(value) return value elsif node.key < value node.right = Node.new(value) return value elsif node.key == value return value end end end def ordered_keys @ordered_keys = [] traverse @ordered_keys end def add_key(node_key) @ordered_keys << node_key end def traverse(node=@root) return if node.nil? traverse(node.left) add_key(node.key) traverse(node.right) end end