From 94fec62bf0c11a4592368835f279b55634f6e836 Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 14:09:35 -0500 Subject: [PATCH 1/7] find method implemented --- .idea/.gitignore | 8 ++++++ .idea/inspectionProfiles/Project_Default.xml | 6 +++++ .idea/misc.xml | 4 +++ .idea/modules.xml | 8 ++++++ .idea/tree-practice.iml | 27 ++++++++++++++++++++ .idea/vcs.xml | 6 +++++ .rakeTasks | 7 +++++ lib/tree.rb | 14 ++++++++-- 8 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/tree-practice.iml create mode 100644 .idea/vcs.xml create mode 100644 .rakeTasks diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..b0db9b0 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..15ffe97 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..59da35e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/tree-practice.iml b/.idea/tree-practice.iml new file mode 100644 index 0000000..2817928 --- /dev/null +++ b/.idea/tree-practice.iml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.rakeTasks b/.rakeTasks new file mode 100644 index 0000000..e409da2 --- /dev/null +++ b/.rakeTasks @@ -0,0 +1,7 @@ + + diff --git a/lib/tree.rb b/lib/tree.rb index c0d4b51..9a04ca2 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -19,13 +19,23 @@ def initialize # Time Complexity: # Space Complexity: def add(key, value) - raise NotImplementedError + end # Time Complexity: # Space Complexity: def find(key) - raise NotImplementedError + current = @root + while current != nil + if current.key <= key + return true if current.key == key + current = current.left + elsif current.key >= key + return true if current.key == key + current = current.right + end + return false + end end # Time Complexity: From 263d75c58150700f0b02f937d6f7029e009a992c Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 14:45:27 -0500 Subject: [PATCH 2/7] find method updated; add method implemented --- lib/tree.rb | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 9a04ca2..9463ad0 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -19,23 +19,51 @@ def initialize # Time Complexity: # Space Complexity: def add(key, value) + if @root.nil? + @root = TreeNode.new(key, value) + return @root.value + end + + current = @root + + while key <= current.key || key > current.key + if key == current.key + "This key is already taken." + elsif key < current.key + if current.left.nil? + current.left = TreeNode.new(key,value) + return value + else + current = current.left + end + else + if current.right.nil? + current.right = TreeNode.new(key,value) + return value + else + current = current.right + end + end + end end + # Time Complexity: # Space Complexity: def find(key) + current = @root while current != nil - if current.key <= key - return true if current.key == key + if current.key == key + return current.value + elsif current.key > key current = current.left - elsif current.key >= key - return true if current.key == key + elsif current.key < key current = current.right end - return false end + return nil end # Time Complexity: From af90c6e21cd53be867e50719c64a8ac2a74f3e0e Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 15:51:30 -0500 Subject: [PATCH 3/7] inorder method implemented --- lib/tree.rb | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 9463ad0..3e27d77 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -16,7 +16,7 @@ def initialize @root = nil end - # Time Complexity: + # Time Complexity: # Space Complexity: def add(key, value) if @root.nil? @@ -52,7 +52,6 @@ def add(key, value) # Time Complexity: # Space Complexity: def find(key) - current = @root while current != nil if current.key == key @@ -69,9 +68,36 @@ def find(key) # Time Complexity: # Space Complexity: def inorder - raise NotImplementedError + array = [] + current = @root + inorder_helper(array, current) + end + + def inorder_helper(array, current) + return array if current.nil? + + #left + inorder_helper(array, current.left) + #middle + array << {:key => current.key, :value => current.value} + #right + inorder_helper(array, current.right) + end + + # def inorder + # + # return [] if @root.nil? + # + # current = @root + # + # while current != nil + # + # end + # + # end + # Time Complexity: # Space Complexity: def preorder From e2506ff19c8e54abe590256a2872f37cbe9355ce Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 15:53:22 -0500 Subject: [PATCH 4/7] preorder method implemented --- lib/tree.rb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 3e27d77..3f2f95e 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -85,23 +85,23 @@ def inorder_helper(array, current) end - - # def inorder - # - # return [] if @root.nil? - # - # current = @root - # - # while current != nil - # - # end - # - # end - # Time Complexity: # Space Complexity: def preorder - raise NotImplementedError + array = [] + current = @root + preorder_helper(array, current) + end + + def preorder_helper(array, current) + return array if current.nil? + #middle + array << {:key => current.key, :value => current.value} + #left + preorder_helper(array, current.left) + #right + preorder_helper(array, current.right) + end # Time Complexity: From dfbd0adfcc2e32e2774732186f62d8e1f342f26d Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 15:54:34 -0500 Subject: [PATCH 5/7] postorder method implemented --- lib/tree.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/tree.rb b/lib/tree.rb index 3f2f95e..5266e70 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -107,7 +107,21 @@ def preorder_helper(array, current) # Time Complexity: # Space Complexity: def postorder - raise NotImplementedError + array = [] + current = @root + postorder_helper(array, current) + end + + def postorder_helper(array, current) + return array if current.nil? + + #left + postorder_helper(array, current.left) + #right + postorder_helper(array, current.right) + #middle + array << {:key => current.key, :value => current.value} + end # Time Complexity: From 245ae27e9e1401eaf35b77e182270da3d9d70a00 Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 16:04:45 -0500 Subject: [PATCH 6/7] height method implemented; and add method's second parameter initiated to nil to make height methods tests pass when using only keys and no values --- lib/tree.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 5266e70..c3a4297 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -18,7 +18,7 @@ def initialize # Time Complexity: # Space Complexity: - def add(key, value) + def add(key, value = nil) if @root.nil? @root = TreeNode.new(key, value) return @root.value @@ -127,7 +127,12 @@ def postorder_helper(array, current) # Time Complexity: # Space Complexity: def height - raise NotImplementedError + height_helper(@root) + end + + def height_helper(root) + return 0 if root.nil? + [1 + height_helper(root.left), 1 + height_helper(root.right)].max end # Optional Method From 050e43c180b1bae5e076b67aa10282f96149c81e Mon Sep 17 00:00:00 2001 From: Alice D Date: Sat, 3 Apr 2021 16:28:45 -0500 Subject: [PATCH 7/7] time and space complexities updated --- lib/tree.rb | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index c3a4297..327b1ee 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(log n); although if the tree is not balanced, this could be O(n) + # Space Complexity: O(1) def add(key, value = nil) if @root.nil? @root = TreeNode.new(key, value) @@ -49,7 +49,7 @@ def add(key, value = nil) end - # Time Complexity: + # Time Complexity: O(log n); although if the tree is not balanced, this could be O(n) # Space Complexity: def find(key) current = @root @@ -65,8 +65,8 @@ def find(key) return nil end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder array = [] current = @root @@ -85,8 +85,8 @@ def inorder_helper(array, current) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder array = [] current = @root @@ -104,8 +104,8 @@ def preorder_helper(array, current) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder array = [] current = @root @@ -124,8 +124,8 @@ def postorder_helper(array, current) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n); although if the tree is not balanced, this could be O(n) + # Space Complexity: O(1) def height height_helper(@root) end @@ -139,9 +139,10 @@ def height_helper(root) # Time Complexity: # Space Complexity: def bfs - raise NotImplementedError + # optional end + # Useful for printing def to_s return "#{self.inorder}"