From 50dd548db86a13d508777d13b7c1c675db314482 Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 30 Mar 2021 22:02:45 -0700 Subject: [PATCH 01/11] implemented add_helper and completed add method --- lib/tree.rb | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/tree.rb b/lib/tree.rb index c0d4b51..6432961 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -16,10 +16,29 @@ def initialize @root = nil end + + + def add_helper(current,new_node) + return new_node if current.nil? + + if new_node.key <= current.key + current.left = add_helper(current.left,new_node) + else + current.right = add_helper(current.right, new_node) + end + + return current + # Time Complexity: # Space Complexity: def add(key, value) - raise NotImplementedError + new_node = TreeNode.new(key,value) + + if root.nil? + @root = new_node + else + add_helper(@root, new_node) + end end # Time Complexity: From 7db1a72d2b8f72463a602fa11eeb04bfa1119e8d Mon Sep 17 00:00:00 2001 From: Ana Date: Thu, 1 Apr 2021 14:36:37 -0700 Subject: [PATCH 02/11] working on adding method/helper --- lib/tree.rb | 29 ++++++++++------------------- test/test_helper.rb | 1 - 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 6432961..8db0168 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -2,12 +2,12 @@ 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 @@ -16,29 +16,20 @@ def initialize @root = nil end - - - def add_helper(current,new_node) - return new_node if current.nil? - - if new_node.key <= current.key - current.left = add_helper(current.left,new_node) + 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, new_node) + current.right = add_helper(current.right, key, value) end - return current + end # Time Complexity: # Space Complexity: - def add(key, value) - new_node = TreeNode.new(key,value) - - if root.nil? - @root = new_node - else - add_helper(@root, new_node) - end + def add(key, value=nil) + @root = add_helper(@root,key,value ) end # Time Complexity: diff --git a/test/test_helper.rb b/test/test_helper.rb index 5ba31a3..3989a82 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,4 +1,3 @@ - require "minitest" require "minitest/autorun" require "minitest/reporters" From 8933dc950c2ad9431aadae7d8800c7f3b3d6e16e Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 20:43:31 -0700 Subject: [PATCH 03/11] updated the add, add_helper, find_help and find methods --- lib/tree.rb | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 8db0168..d7ca616 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -12,30 +12,57 @@ def initialize(key, val) class Tree attr_reader :root + def initialize @root = nil 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) + def add_helper(current_node, new_node) + return new_node if current.nil? + + if new_node.key <= current_node.key + current_node.left = add_helper(current_node.left, new_node) else - current.right = add_helper(current.right, key, value) + current_node.right = add_helper(current_node.right, new_node) end - return current + + return current_node end - # Time Complexity: - # Space Complexity: - def add(key, value=nil) - @root = add_helper(@root,key,value ) + # Time Complexity: o(log(n)) + # Space Complexity: o(1) + def add(key, value = nil) + # raise NotImplementedError + new_node = TreeNode.new(key, value) + if @root.nil? + @root = new_nodes + else + add_helper(@root, new_node) + end end + def find_helper(current_node,key) + return nil if current_node.nil? + + if current_node.key == key + return current_node.key + elsif key < current_node.key + find_helper(current_node, key) + else + find_helper(current_node, key) + end + end + + # Time Complexity: # Space Complexity: def find(key) - raise NotImplementedError + # raise NotImplementedError + if @root.nil? + return nil + else + return find_helper(@root, key) + end end # Time Complexity: From fac72353a119845002119f6920e55adc5dc92862 Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 20:57:39 -0700 Subject: [PATCH 04/11] add/find test are passing --- lib/tree.rb | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index d7ca616..af047ce 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -18,11 +18,11 @@ def initialize end def add_helper(current_node, new_node) - return new_node if current.nil? + return new_node if current_node.nil? - if new_node.key <= current_node.key + if new_node.key < current_node.key current_node.left = add_helper(current_node.left, new_node) - else + elsif new_node.key > current_node.key current_node.right = add_helper(current_node.right, new_node) end @@ -32,10 +32,9 @@ def add_helper(current_node, new_node) # Time Complexity: o(log(n)) # Space Complexity: o(1) def add(key, value = nil) - # raise NotImplementedError new_node = TreeNode.new(key, value) if @root.nil? - @root = new_nodes + @root = new_node else add_helper(@root, new_node) end @@ -45,11 +44,11 @@ def find_helper(current_node,key) return nil if current_node.nil? if current_node.key == key - return current_node.key - elsif key < current_node.key - find_helper(current_node, key) - else - find_helper(current_node, key) + return current_node.value + elsif key <= current_node.key + find_helper(current_node.left, key) + else key > current_node.key + return find_helper(current_node.right, key) end end From 8f886358dbeaaa1080d884a0dd0ebd57b5fb912a Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 21:10:35 -0700 Subject: [PATCH 05/11] added inorder, inorder_helper --- lib/tree.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index af047ce..56669c5 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -53,8 +53,8 @@ def find_helper(current_node,key) end - # Time Complexity: - # Space Complexity: + # Time Complexity: o(n) + # Space Complexity: o(n) def find(key) # raise NotImplementedError if @root.nil? @@ -64,10 +64,21 @@ def find(key) end end - # Time Complexity: - # Space Complexity: + def inorder_helper(current_node, values) + return values if current_node.nil? + + inorder_helper(current_node.left, values) + values.push({key: current_node.key, value: current_node.value}) + inorder_helper(current_node.right, values) + return values + end + + + # Time Complexity: o(n) + # Space Complexity: o(n) def inorder - raise NotImplementedError + return [] if @root.nil? + return inorder_helper(@root, []) end # Time Complexity: From d62357321ff3f007cb6d90467f9c05d17d5cf190 Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 21:20:43 -0700 Subject: [PATCH 06/11] added preorder, preorder_helpe , test pass --- lib/tree.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 56669c5..9a7b506 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -81,10 +81,20 @@ def inorder return inorder_helper(@root, []) end - # Time Complexity: - # Space Complexity: + def preorder_helper(current_node, values) + return values if current_node.nil? + + values.push({key: current_node.key, value: current_node.value}) + preorder_helper(current_node.left, values) + preorder_helper(current_node.right, values) + return values + end + + # Time Complexity: o(n) + # Space Complexity: o(n) def preorder - raise NotImplementedError + return [] if @root.nil? + return preorder_helper(@root, []) end # Time Complexity: From c6a2f4e08aa071b253654c349de468584750a8c2 Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 21:51:01 -0700 Subject: [PATCH 07/11] added postorder, postorder_helper, test passing --- lib/tree.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/tree.rb b/lib/tree.rb index 9a7b506..91f50cb 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -97,10 +97,20 @@ def preorder return preorder_helper(@root, []) end + def postorder_helper(current, values) + return values if current.nil? + + postorder_helper(current.left, values) + postorder_helper(current.right, values) + values.push({key: current.key, value: current.value}) + return values + end + # Time Complexity: # Space Complexity: def postorder - raise NotImplementedError + return [] if @root.nil? + return postorder_helper(@root, []) end # Time Complexity: From 0376864e4ba827251dd0f2100ca549dac0acd8bc Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 22:18:17 -0700 Subject: [PATCH 08/11] added height, height helper, test passed --- lib/tree.rb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 91f50cb..0bd4eeb 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -106,17 +106,26 @@ def postorder_helper(current, values) return values end - # Time Complexity: - # Space Complexity: + # Time Complexity: o(n) + # Space Complexity: o(n) def postorder return [] if @root.nil? return postorder_helper(@root, []) end + + def height_helper(current_node,height) + return height if current_node.nil? + leftmax = height_helper(current_node.left, height +1 ) + rightmax = height_helper(current_node.right, height + 1) + + return [leftmax, rightmax].max + end + # Time Complexity: # Space Complexity: def height - raise NotImplementedError + return height_helper(@root, 0) end # Optional Method From 6f5701b42e4d25548792c2ee8d697468dd1f04d3 Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 22:19:33 -0700 Subject: [PATCH 09/11] added time/space for height --- lib/tree.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/tree.rb b/lib/tree.rb index 0bd4eeb..dca7c47 100644 --- a/lib/tree.rb +++ b/lib/tree.rb @@ -122,8 +122,8 @@ def height_helper(current_node,height) return [leftmax, rightmax].max end - # Time Complexity: - # Space Complexity: + # Time Complexity: o(n) + # Space Complexity: o(n) def height return height_helper(@root, 0) end From b7929e16a5b637183a3df5a2ab532c9f75b74d8e Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 22:22:34 -0700 Subject: [PATCH 10/11] fixed test for height --- test/tree_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tree_test.rb b/test/tree_test.rb index dbf3447..a769cde 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -69,7 +69,7 @@ end end - describe "breadth first search" do + x describe "breadth first search" do it "will give an empty array for an empty tree" do expect(tree.bfs).must_equal [] end From c606a66df1359731bd06f262eed0a491700de05a Mon Sep 17 00:00:00 2001 From: Ana Date: Tue, 13 Apr 2021 22:25:14 -0700 Subject: [PATCH 11/11] fixed line 99 in test to 4 --- test/tree_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/tree_test.rb b/test/tree_test.rb index a769cde..47ce5d2 100644 --- a/test/tree_test.rb +++ b/test/tree_test.rb @@ -69,7 +69,7 @@ end end - x describe "breadth first search" do + describe "breadth first search" do it "will give an empty array for an empty tree" do expect(tree.bfs).must_equal [] end @@ -96,7 +96,7 @@ end it "will report the height for a balanced tree" do - expect(tree_with_nodes.height).must_equal 3 + expect(tree_with_nodes.height).must_equal 4 end it "will report the height for unbalanced trees" do