From 6fb4d85e5f7c8ac9e539398bc8b13509775e0707 Mon Sep 17 00:00:00 2001 From: Kristy Hisaw Date: Wed, 19 Feb 2020 20:56:39 -0800 Subject: [PATCH 1/4] testing git push --- lib/tree.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tree.rb b/lib/tree.rb index c0d4b51..9aec740 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -19,7 +19,7 @@ def initialize # Time Complexity: # Space Complexity: def add(key, value) - raise NotImplementedError + puts "test" end # Time Complexity: From efd8a25389304bcaf479ade4b165d339f1340408 Mon Sep 17 00:00:00 2001 From: Kristy Hisaw Date: Sat, 22 Feb 2020 11:28:24 -0800 Subject: [PATCH 2/4] wrote find and add, not yet passing test --- lib/tree.rb | 52 +++++++++++++++++++++++++++++++++++++---------- test/tree_test.rb | 10 ++++----- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 9aec740..cd6f080 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,80 @@ class Tree def initialize @root = nil end - + # Time Complexity: # Space Complexity: def add(key, value) - puts "test" + add_helper(@root, key, value) end + def add_helper(current, key, value) + return TreeNode.new(key, value) if current.nil? + if key < current.key + current.left = add_helper(current.left, key, value) + else + current.right = add_helper(current.right, key, value) + end + return current + end + # Time Complexity: # Space Complexity: def find(key) - raise NotImplementedError + return find_helper(@root, key) end + def find_helper(current, key) + return nil if current.nil? + return current.value if current.key == key + if key > current.key + return find_helper(current.right, key) + else + return find_helper(current.left, key) + end + end + # Time Complexity: # Space Complexity: def inorder - raise NotImplementedError + return inorder_helper(@root, []) end + def inorder_helper(current, list) + return list if current.nil? + + inorder_helper(current.left, list) + list << { key: current.key, value: current.value } + inorder_helper(current.right, list) + + return list + 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}" diff --git a/test/tree_test.rb b/test/tree_test.rb index 345bf66..51adef4 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -43,7 +43,7 @@ end - describe "preorder" do + xdescribe "preorder" do it "will give an empty array for an empty tree" do expect(tree.preorder).must_equal [] end @@ -55,7 +55,7 @@ end end - describe "postorder" do + xdescribe "postorder" do it "will give an empty array for an empty tree" do expect(tree.postorder).must_equal [] end @@ -67,7 +67,7 @@ end end - describe "breadth first search" do + xdescribe "breadth first search" do it "will give an empty array for an empty tree" do expect(tree.bfs).must_equal [] end @@ -79,7 +79,7 @@ end end - describe "height" do + xdescribe "height" do it "will return 0 if tree is empty" do expect(tree.height()).must_equal 0 end @@ -98,7 +98,7 @@ end end - describe "delete" do + xdescribe "delete" do it "can delete a note in the tree" do # Arrange & Assert expect(tree_with_nodes.find(15)).must_equal "Ada" From a78cbfd917c125d2a4d108f88b8966ee21253bc1 Mon Sep 17 00:00:00 2001 From: Kristy Hisaw Date: Sat, 22 Feb 2020 12:18:55 -0800 Subject: [PATCH 3/4] finished order and height methods, tests passing --- lib/tree.rb | 33 +++++++++++++++++++++++++++++---- test/tree_test.rb | 6 +++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index cd6f080..b125731 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -19,7 +19,7 @@ def initialize # Time Complexity: # Space Complexity: def add(key, value) - add_helper(@root, key, value) + @root = add_helper(@root, key, value) end def add_helper(current, key, value) @@ -67,19 +67,44 @@ def inorder_helper(current, list) # Time Complexity: # Space Complexity: def preorder - raise NotImplementedError + return preorder_helper(@root, []) + end + + def preorder_helper(current, list) + return list if current.nil? + list << {key: current.key, value: current.value} + preorder_helper(current.left, list) + preorder_helper(current.right, list) + return list end # Time Complexity: # Space Complexity: def postorder - raise NotImplementedError + return postorder_helper(@root, []) + end + + def postorder_helper(current, list) + return list if current.nil? + postorder_helper(current.left, list) + postorder_helper(current.right, list) + list << {key: current.key, value: current.value} + return list end # Time Complexity: # Space Complexity: def height - raise NotImplementedError + return height_helper(@root, 0, 1) + end + + def height_helper(current, max, count) + return max if current.nil? + + max = count if count > max + height_helper(current.left, max, (count + 1)) + height_helper(current.right, max, (count + 1)) + end # Optional Method diff --git a/test/tree_test.rb b/test/tree_test.rb index 51adef4..55d9c99 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -43,7 +43,7 @@ end - xdescribe "preorder" do + describe "preorder" do it "will give an empty array for an empty tree" do expect(tree.preorder).must_equal [] end @@ -55,7 +55,7 @@ end end - xdescribe "postorder" do + describe "postorder" do it "will give an empty array for an empty tree" do expect(tree.postorder).must_equal [] end @@ -79,7 +79,7 @@ end end - xdescribe "height" do + describe "height" do it "will return 0 if tree is empty" do expect(tree.height()).must_equal 0 end From c12caeb088fcc7067ca5be9334c948f8dbf42cd1 Mon Sep 17 00:00:00 2001 From: Kristy Hisaw Date: Tue, 25 Feb 2020 19:39:46 -0800 Subject: [PATCH 4/4] filled in space/time complexity --- lib/tree.rb | 29 +++++++++++++++++------------ test/tree_test.rb | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index b125731..8a27aea 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -16,8 +16,8 @@ def initialize @root = nil end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def add(key, value) @root = add_helper(@root, key, value) end @@ -32,8 +32,8 @@ def add_helper(current, key, value) return current end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n) + # Space Complexity: O(log n) def find(key) return find_helper(@root, key) end @@ -48,8 +48,8 @@ def find_helper(current, key) end end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder return inorder_helper(@root, []) end @@ -64,8 +64,8 @@ def inorder_helper(current, list) return list end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder return preorder_helper(@root, []) end @@ -78,8 +78,8 @@ def preorder_helper(current, list) return list end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder return postorder_helper(@root, []) end @@ -92,8 +92,8 @@ def postorder_helper(current, list) return list end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def height return height_helper(@root, 0, 1) end @@ -106,6 +106,11 @@ def height_helper(current, max, count) height_helper(current.right, max, (count + 1)) end + + # def delete(key) + # return nil if self.find(key).nil? + + # end # Optional Method # Time Complexity: diff --git a/test/tree_test.rb b/test/tree_test.rb index 55d9c99..cf8d811 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -98,7 +98,7 @@ end end - xdescribe "delete" do + describe "delete" do it "can delete a note in the tree" do # Arrange & Assert expect(tree_with_nodes.find(15)).must_equal "Ada"