From 66c31c0737027621a30a0d4623b816d8b10a0dcb Mon Sep 17 00:00:00 2001 From: Vange Spracklin Date: Sat, 9 Jul 2022 17:32:46 -0700 Subject: [PATCH 1/4] solves add function --- binary_search_tree/tree.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..c3bc297 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -17,7 +17,14 @@ def __init__(self): # Time Complexity: # Space Complexity: def add(self, key, value = None): - pass + if not self.root: + self.root = TreeNode(key, value) + return self.root + if key <= self.root.key: + self.root.left = self.root.add(key, value) + elif key > self.root.key: + self.root.right = self.root.add(key, value) + #this doesn't have a return value # Time Complexity: # Space Complexity: @@ -56,4 +63,4 @@ def bfs(self): # # Useful for printing def to_s(self): - return f"{self.inorder()}" + return f"{self.inorder()}" \ No newline at end of file From 7e8d2ba5a65864c99596dfdb3cef53afbdf4f310 Mon Sep 17 00:00:00 2001 From: Vange Spracklin Date: Sat, 9 Jul 2022 19:25:36 -0700 Subject: [PATCH 2/4] adds helper function --- binary_search_tree/tree.py | 34 +++++++++++++++++++++++--------- tests/test_binary_search_tree.py | 4 ++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index c3bc297..ef1544a 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -14,22 +14,38 @@ class Tree: def __init__(self): self.root = None + def add_helper(self, current_node, key, value ): + pass + if current_node == None: + return TreeNode(key, value) + if key <= current_node.key: + current_node.left = self.add_helper(current_node.left, key, value) + else: + current_node.right = self.add_helper(current_node.right, key, value) + return current_node + # Time Complexity: # Space Complexity: def add(self, key, value = None): - if not self.root: - self.root = TreeNode(key, value) - return self.root - if key <= self.root.key: - self.root.left = self.root.add(key, value) - elif key > self.root.key: - self.root.right = self.root.add(key, value) - #this doesn't have a return value + if self.root == None: + self.root = TreeNode(key, value) + else: + self.add_helper(self.root, key, value) # Time Complexity: # Space Complexity: def find(self, key): - pass + if self.root == None: + return None + current = self.root + while current != None: + if current.key == key: + return current.value + elif current.key > key: + current = current.left + elif current.key < key: + current = current.right + return None # Time Complexity: # Space Complexity: diff --git a/tests/test_binary_search_tree.py b/tests/test_binary_search_tree.py index 587d7fb..9f1d81e 100644 --- a/tests/test_binary_search_tree.py +++ b/tests/test_binary_search_tree.py @@ -25,6 +25,7 @@ def test_find_returns_none_for_empty_tree(empty_tree): def test_can_find_single_root_node(empty_tree): empty_tree.add(25, "Kari") + assert empty_tree.find(25) == "Kari" @@ -237,3 +238,6 @@ def test_bfs_with_tree_with_nodes(tree_with_nodes): answer = tree_with_nodes.bfs() assert answer == expected_answer + +def tests_by_vange(tree_with_nodes): + pass From 7aef501318fd14b8518e44e5222595c602fc5abc Mon Sep 17 00:00:00 2001 From: Vange Spracklin Date: Sat, 9 Jul 2022 19:42:03 -0700 Subject: [PATCH 3/4] in order first test --- binary_search_tree/tree.py | 8 +++++--- tests/test_binary_search_tree.py | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index ef1544a..401c995 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -41,16 +41,18 @@ def find(self, key): while current != None: if current.key == key: return current.value - elif current.key > key: + elif current.key >= key: current = current.left - elif current.key < key: + else: current = current.right return None # Time Complexity: # Space Complexity: def inorder(self): - pass + if self.root == None: + return [] + # Time Complexity: # Space Complexity: diff --git a/tests/test_binary_search_tree.py b/tests/test_binary_search_tree.py index 9f1d81e..5b3e2bb 100644 --- a/tests/test_binary_search_tree.py +++ b/tests/test_binary_search_tree.py @@ -50,7 +50,6 @@ def test_inorder_with_empty_tree(empty_tree): answer = empty_tree.inorder() assert empty_tree.inorder() == [] - def test_inorder_with_nodes(tree_with_nodes): expected_answer = [ { @@ -239,5 +238,6 @@ def test_bfs_with_tree_with_nodes(tree_with_nodes): answer = tree_with_nodes.bfs() assert answer == expected_answer -def tests_by_vange(tree_with_nodes): - pass +# def tests_by_vange(tree_with_nodes): +# tree_with_nodes.inorder() == 1 +# pass From 88c92e5d648f3c63b23cd4a3297f63edd876f629 Mon Sep 17 00:00:00 2001 From: Vange Spracklin Date: Sun, 10 Jul 2022 20:16:47 -0700 Subject: [PATCH 4/4] solves height tests --- binary_search_tree/tree.py | 68 +++++++++++++++++++++++++++----- tests/test_binary_search_tree.py | 7 +--- 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 401c995..4c24a57 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -15,7 +15,6 @@ def __init__(self): self.root = None def add_helper(self, current_node, key, value ): - pass if current_node == None: return TreeNode(key, value) if key <= current_node.key: @@ -47,27 +46,78 @@ def find(self, key): current = current.right return None - # Time Complexity: - # Space Complexity: + # In-Order: Left, Current, Right + def inorder_helper(self, root, inorder_list): + if root: + # Traverse left + self.inorder_helper(root.left, inorder_list) + # Traverse root + # print(str(root.val) + "->", end='') + inorder_list.append({"key" : root.key, "value" : root.value}) + # Traverse right + self.inorder_helper(root.right, inorder_list) + return inorder_list + + # # Time Complexity: + # # Space Complexity: def inorder(self): + inorder_list = [] if self.root == None: - return [] + return inorder_list + else: + return self.inorder_helper(self.root, inorder_list) + def preorder_helper(self, root, preorder_list): + if root: + preorder_list.append({"key" : root.key, "value" : root.value}) + self.preorder_helper(root.left, preorder_list) + self.preorder_helper(root.right, preorder_list) + return preorder_list # Time Complexity: # Space Complexity: def preorder(self): - pass + preorder_list = [] + if self.root == None: + return preorder_list + else: + return self.preorder_helper(self.root, preorder_list) + + def postorder_helper(self, root, postorder_list): + if root: + self.postorder_helper(root.left, postorder_list) + self.postorder_helper(root.right, postorder_list) + postorder_list.append({"key" : root.key, "value" : root.value}) + return postorder_list # Time Complexity: # Space Complexity: def postorder(self): - pass + postorder_list = [] + if self.root == None: + return postorder_list + else: + return self.postorder_helper(self.root, postorder_list) + + + def height_helper(self, root): + if root == None: + return 0 + lefth= self.height_helper(root.left) + righth = self.height_helper(root.right) + + if lefth > righth: + return lefth + 1 + else: + return righth + 1 # Time Complexity: # Space Complexity: def height(self): - pass + if self.root == None: + return 0 + else: + return self.height_helper(self.root) # # Optional Method @@ -76,9 +126,7 @@ def height(self): def bfs(self): pass - - # # Useful for printing def to_s(self): - return f"{self.inorder()}" \ No newline at end of file + return f"{self.inorder()}" diff --git a/tests/test_binary_search_tree.py b/tests/test_binary_search_tree.py index 5b3e2bb..d74d8dd 100644 --- a/tests/test_binary_search_tree.py +++ b/tests/test_binary_search_tree.py @@ -1,7 +1,6 @@ import pytest from binary_search_tree.tree import Tree - @pytest.fixture() def empty_tree() -> Tree(): return Tree() @@ -236,8 +235,4 @@ def test_bfs_with_tree_with_nodes(tree_with_nodes): ] answer = tree_with_nodes.bfs() - assert answer == expected_answer - -# def tests_by_vange(tree_with_nodes): -# tree_with_nodes.inorder() == 1 -# pass + assert answer == expected_answer \ No newline at end of file