From b230998f433d4b0183bb8491e059e93c1773d387 Mon Sep 17 00:00:00 2001 From: Brianna Kemp Date: Mon, 24 Feb 2020 10:17:27 -0800 Subject: [PATCH 1/3] Added add and inorder methods --- lib/tree.rb | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index c0d4b51..23ebdb7 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -1,13 +1,13 @@ class TreeNode attr_reader :key, :value attr_accessor :left, :right - - def initialize(key, val) + + def initialize(key, val) @key = key @value = val @left = nil @right = nil - end + end end class Tree @@ -15,50 +15,72 @@ class Tree def initialize @root = nil end - + + def add_helper(current_node, key, value) + return TreeNode.new(key, value) if current_node.nil? + + if key < current_node.key + current_node.left = add_helper(current_node.left, key, value) + else + current_node.right = add_helper(current_node.right, key, value) + end + + return current_node + end + # Time Complexity: # Space Complexity: def add(key, value) - raise NotImplementedError + @root = add_helper(@root, key, value) end - + # Time Complexity: # Space Complexity: def find(key) raise NotImplementedError end - + + def inorder_helper(current_node, list) + return list if current_node.nil? + + inorder_helper(current_node.left, list) + list << {key: current_node.key, value: current_node.value} + inorder_helper(current_node.right, list) + + return list + end + # Time Complexity: # Space Complexity: def inorder - raise NotImplementedError + return inorder_helper(@root, []) end - + # Time Complexity: # Space Complexity: def preorder raise NotImplementedError end - + # Time Complexity: # Space Complexity: def postorder raise NotImplementedError end - + # Time Complexity: # Space Complexity: def height raise NotImplementedError end - + # Optional Method # Time Complexity: # Space Complexity: def bfs raise NotImplementedError end - + # Useful for printing def to_s return "#{self.inorder}" From 36c4406166d7dcddf99774a9563b60b4bf95e18d Mon Sep 17 00:00:00 2001 From: Brianna Kemp Date: Tue, 25 Feb 2020 20:33:22 -0800 Subject: [PATCH 2/3] Added additional methods, tests passing --- lib/tree.rb | 89 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 16 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 23ebdb7..dac6843 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -28,16 +28,28 @@ def add_helper(current_node, key, value) return current_node end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n) + # Space Complexity: O(log n) def add(key, value) @root = add_helper(@root, key, value) end - # Time Complexity: - # Space Complexity: + def find_helper(current_node, target) + return current_node if current_node == nil + return current_node.value if current_node.key == target + + if target < current_node.key + find_helper(current_node.left, target) + else + find_helper(current_node.right, target) + end + + end + + # Time Complexity: O(log n) + # Space Complexity: O(log n) def find(key) - raise NotImplementedError + return find_helper(@root, key) end def inorder_helper(current_node, list) @@ -50,28 +62,63 @@ def inorder_helper(current_node, list) return list end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder return inorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + def preorder_helper(current_node, list) + return list if current_node.nil? + + list << {key: current_node.key, value: current_node.value} + preorder_helper(current_node.left, list) + preorder_helper(current_node.right, list) + + return list + end + + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder - raise NotImplementedError + return preorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + def postorder_helper(current_node, list) + return list if current_node.nil? + + postorder_helper(current_node.left, list) + postorder_helper(current_node.right, list) + list << {key: current_node.key, value: current_node.value} + + return list + end + + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder - raise NotImplementedError + return postorder_helper(@root, []) + end + + # Time Complexity: O(log n) + # Space Complexity: O(log n) + + def height_helper(current_node) + return 0 if current_node.nil? + + left = height_helper(current_node.left) + right = height_helper(current_node.right) + + if left > right + return left += 1 + else + return right += 1 + end end - # Time Complexity: - # Space Complexity: def height - raise NotImplementedError + return 0 if @root.nil? + return height_helper(@root) end # Optional Method @@ -86,3 +133,13 @@ def to_s return "#{self.inorder}" end end + +tree = Tree.new +tree.add(1, "Brianna") +tree.add(2, "Brianna") +tree.add(3, "Brianna") +# p tree + +# p tree.inorder +p tree.find(2) +p tree.find(3) \ No newline at end of file From b18e4f243559b94845bdbdd78797e63fca568b4e Mon Sep 17 00:00:00 2001 From: Brianna Kemp Date: Tue, 25 Feb 2020 20:36:19 -0800 Subject: [PATCH 3/3] Commented out test lines --- lib/tree.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index dac6843..bc5facf 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -134,12 +134,12 @@ def to_s end end -tree = Tree.new -tree.add(1, "Brianna") -tree.add(2, "Brianna") -tree.add(3, "Brianna") -# p tree +# tree = Tree.new +# tree.add(1, "Brianna") +# tree.add(2, "Brianna") +# tree.add(3, "Brianna") +# # p tree -# p tree.inorder -p tree.find(2) -p tree.find(3) \ No newline at end of file +# # p tree.inorder +# p tree.find(2) +# p tree.find(3) \ No newline at end of file