From 20d40393d400563d93c081923879a9a571d47a80 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 11:28:04 -0700 Subject: [PATCH 1/7] added add method --- lib/tree.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/tree.rb b/lib/tree.rb index c0d4b51..7bc3de1 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 + @root = add_helper(@root, key, value) end # Time Complexity: @@ -64,3 +64,17 @@ def to_s return "#{self.inorder}" end end + +# Helper methods +def add_helper(current, key, value = nil) + if current.nil? + current = TreeNode.new(key, value) + elsif key >= current.key + current.right = add_helper(current.right, key, value) + else + current.left = add_helper(current.left, key, value) + end + + return current + +end \ No newline at end of file From 367947acd8f7a76484d01613e2623af76cee4f16 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 11:37:27 -0700 Subject: [PATCH 2/7] added find method --- lib/tree.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 7bc3de1..714d0ce 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) + # Space Complexity: O(log n) def add(key, value) @root = add_helper(@root, key, value) end @@ -25,7 +25,7 @@ def add(key, value) # Time Complexity: # Space Complexity: def find(key) - raise NotImplementedError + find_helper(@root,key) end # Time Complexity: @@ -77,4 +77,16 @@ def add_helper(current, key, value = nil) return current +end + +def find_helper(current, key) + return nil if current.nil? + + if key == current.key + return current.value + elsif key > current.key + return find_helper(current.right, key) + elsif key < current.key + return find_helper(current.left, key) + end end \ No newline at end of file From 73947a3a017cf1b6180cb4f4dcc92ed604fe6bcf Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 11:49:35 -0700 Subject: [PATCH 3/7] added inorder method --- lib/tree.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 714d0ce..f9a9a6d 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -22,8 +22,8 @@ def add(key, value) @root = add_helper(@root, key, value) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n) + # Space Complexity: O(log n) def find(key) find_helper(@root,key) end @@ -31,7 +31,7 @@ def find(key) # Time Complexity: # Space Complexity: def inorder - raise NotImplementedError + inorder_helper(@root, []) end # Time Complexity: @@ -89,4 +89,16 @@ def find_helper(current, key) elsif key < current.key return find_helper(current.left, key) end +end + +def inorder_helper(node, array) + # Current, Left, Right + return array if node.nil? + + inorder_helper(node.left, array) + array << { + key: node.key, + value: node.value + } + inorder_helper(node.right, array) end \ No newline at end of file From 6542adffcf786b36a9e4c8d632f9fa05c0b253cb Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 11:57:51 -0700 Subject: [PATCH 4/7] added preOrder method --- lib/tree.rb | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index f9a9a6d..9a30ee3 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -28,8 +28,8 @@ def find(key) find_helper(@root,key) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder inorder_helper(@root, []) end @@ -37,7 +37,7 @@ def inorder # Time Complexity: # Space Complexity: def preorder - raise NotImplementedError + preorder_helper(@root, []) end # Time Complexity: @@ -92,7 +92,7 @@ def find_helper(current, key) end def inorder_helper(node, array) - # Current, Left, Right + # Left, Current, Right return array if node.nil? inorder_helper(node.left, array) @@ -101,4 +101,16 @@ def inorder_helper(node, array) value: node.value } inorder_helper(node.right, array) +end + +def preorder_helper(node, array) + # Current, Left, Right + return array if node.nil? + + array << { + key: node.key, + value: node.value + } + preorder_helper(node.left, array) + preorder_helper(node.right, array) end \ No newline at end of file From 2ce75acecbade3b0d3599f17832c66f39d57c046 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 12:04:42 -0700 Subject: [PATCH 5/7] added postorder method --- lib/tree.rb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 9a30ee3..47d01ea 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -34,16 +34,16 @@ def inorder inorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder preorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder - raise NotImplementedError + postorder_helper(@root, []) end # Time Complexity: @@ -113,4 +113,16 @@ def preorder_helper(node, array) } preorder_helper(node.left, array) preorder_helper(node.right, array) +end + +def postorder_helper(node, array) + # Left, Right, Current + return array if node.nil? + + postorder_helper(node.left, array) + postorder_helper(node.right, array) + array << { + key: node.key, + value: node.value + } end \ No newline at end of file From f29b5b2ac142bbd5a158c385e864d393df659b71 Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 15:07:01 -0700 Subject: [PATCH 6/7] added height method --- lib/tree.rb | 13 +++++++++++-- test/tree_test.rb | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 47d01ea..bec1d9c 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -18,7 +18,7 @@ def initialize # Time Complexity: O(log n) # Space Complexity: O(log n) - def add(key, value) + def add(key, value = nil) @root = add_helper(@root, key, value) end @@ -49,7 +49,7 @@ def postorder # Time Complexity: # Space Complexity: def height - raise NotImplementedError + height_helper(@root) end # Optional Method @@ -125,4 +125,13 @@ def postorder_helper(node, array) key: node.key, value: node.value } +end + +def height_helper(node) + return 0 if node.nil? + + right_count = height_helper(node.right) + 1 + left_count = height_helper(node.left) + 1 + + return [right_count, left_count].max end \ No newline at end of file diff --git a/test/tree_test.rb b/test/tree_test.rb index dbf3447..24632f5 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -69,7 +69,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 From 22d8ce049a87830416d2c659559e30627abd1bbc Mon Sep 17 00:00:00 2001 From: "Noor B.A" Date: Thu, 15 Apr 2021 15:09:03 -0700 Subject: [PATCH 7/7] added space, time complexity for height --- lib/tree.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index bec1d9c..15fd0a3 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -46,8 +46,8 @@ def postorder postorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def height height_helper(@root) end