From 0aa6853c938fa6d9ed2f58a01e18a12d62d22933 Mon Sep 17 00:00:00 2001 From: Ainur Dzhaianbaeva Date: Sun, 5 Jun 2022 22:00:14 -0700 Subject: [PATCH 1/5] Implement add() function --- binary_search_tree/tree.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..8197540 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -14,10 +14,27 @@ class Tree: def __init__(self): self.root = None - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log N) or O(n) + # Space Complexity: O(n) + + def insert_node_helper(self, current_node, key, value): + if current_node == None: + return TreeNode(key, value) + + if key < current_node.key: + current_node.left = self.insert_node_helper(current_node.left, key, value) + else: + current_node.right = self.insert_node_helper(current_node.right, key, value) + return current_node + def add(self, key, value = None): - pass + # BST is empty + if self.root is None: + self.root = TreeNode(key, value) + + # BST is not empty + self.insert_node_helper(self.root, key, value) + # Time Complexity: # Space Complexity: From 2cda1ee07373f26aa2b0fce0c077d5d84dcc085b Mon Sep 17 00:00:00 2001 From: Ainur Dzhaianbaeva Date: Sun, 5 Jun 2022 22:12:15 -0700 Subject: [PATCH 2/5] implement find() function --- binary_search_tree/tree.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 8197540..28503da 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -39,7 +39,18 @@ def add(self, key, value = None): # 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.right + else: + current = current.left + return None + # Time Complexity: # Space Complexity: From f511d16bac74744ec070d54cb13c219a4a816c7d Mon Sep 17 00:00:00 2001 From: Ainur Dzhaianbaeva Date: Sat, 18 Jun 2022 18:52:32 -0700 Subject: [PATCH 3/5] implement dfs tree traversals --- binary_search_tree/tree.py | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 28503da..f04ec29 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -36,8 +36,8 @@ def add(self, key, value = None): self.insert_node_helper(self.root, key, value) - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log N) or O(n) + # Space Complexity: O(n) def find(self, key): if self.root == None: return None @@ -54,18 +54,40 @@ def find(self, key): # Time Complexity: # Space Complexity: + def inorder_helper(self, current, result): + if current is not None: + self.inorder_helper(current.left, result) + result.append({'key': current.key, 'value': current.value}) + self.inorder_helper(current.right, result) def inorder(self): - pass + result = [] + self.inorder_helper(self.root, result) + return result # Time Complexity: - # Space Complexity: + # Space Complexity: + def preorder_helper(self, current, result): + if current: + result.append({"key": current.key, "value": current.value}) + self.preorder_helper(current.left, result) + self.preorder_helper(current.right, result) def preorder(self): - pass + result = [] + self.preorder_helper(self.root, result) + return result + # Time Complexity: - # Space Complexity: + # Space Complexity: + def postorder_helper(self, current, result): + if current: + self.postorder_helper(current.left, result) + self.postorder_helper(current.right, result) + result.append({"key": current.key, "value": current.value}) def postorder(self): - pass + result = [] + self.postorder_helper(self.root, result) + return result # Time Complexity: # Space Complexity: @@ -76,8 +98,6 @@ def height(self): # # Optional Method # # Time Complexity: # # Space Complexity: - def bfs(self): - pass From 1502b9004ee402e46ccbd588819ecb4b80e70764 Mon Sep 17 00:00:00 2001 From: Ainur Dzhaianbaeva Date: Sun, 19 Jun 2022 00:27:43 -0700 Subject: [PATCH 4/5] implement bfs --- binary_search_tree/tree.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index f04ec29..325b08c 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -59,6 +59,7 @@ def inorder_helper(self, current, result): self.inorder_helper(current.left, result) result.append({'key': current.key, 'value': current.value}) self.inorder_helper(current.right, result) + def inorder(self): result = [] self.inorder_helper(self.root, result) @@ -90,16 +91,37 @@ def postorder(self): return result # Time Complexity: - # Space Complexity: + # Space Complexity: + def height_helper(self, current): + if current: + height_left = self.height_helper(current.left) + height_right = self.height_helper(current.right) + return max(height_left, height_right)+1 def height(self): - pass + if self.root == None: + return 0 + return self.height_helper(self.root) # # Optional Method # # Time Complexity: # # Space Complexity: - + def bfs(self): + result = [] + + if self.root == None: + return result + + queue = [self.root] + while queue: + current = queue.pop(0) + result.append({"key": current.key, "value": current.value}) + if current.left: + queue.append(current.left) + if current.right: + queue.append(current.right) + return result # # Useful for printing From 6fb744b3dc4df4b5fad4856a8c10cc7e830d45b4 Mon Sep 17 00:00:00 2001 From: Ainur Dzhaianbaeva Date: Tue, 28 Jun 2022 10:16:16 -0700 Subject: [PATCH 5/5] update --- binary_search_tree/tree.py | 41 +++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 325b08c..b568ab7 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -52,34 +52,38 @@ def find(self, key): return None - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder_helper(self, current, result): - if current is not None: + if current is None: + return result + else: self.inorder_helper(current.left, result) result.append({'key': current.key, 'value': current.value}) self.inorder_helper(current.right, result) + return result def inorder(self): result = [] - self.inorder_helper(self.root, result) - return result + # result_value = self.inorder_helper(self.root, result) + return self.inorder_helper(self.root, result) - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder_helper(self, current, result): if current: result.append({"key": current.key, "value": current.value}) self.preorder_helper(current.left, result) - self.preorder_helper(current.right, result) + self.preorder_helper(current.right, result) + return result def preorder(self): result = [] - self.preorder_helper(self.root, result) - return result + # self.preorder_helper(self.root, result) + return self.preorder_helper(self.root, result) - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder_helper(self, current, result): if current: self.postorder_helper(current.left, result) @@ -90,22 +94,23 @@ def postorder(self): self.postorder_helper(self.root, result) return result - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(1) def height_helper(self, current): + if current == None: + return 0 if current: height_left = self.height_helper(current.left) height_right = self.height_helper(current.right) return max(height_left, height_right)+1 def height(self): - if self.root == None: - return 0 + return self.height_helper(self.root) # # Optional Method -# # Time Complexity: -# # Space Complexity: +# # Time Complexity: O(n) +# # Space Complexity: O(n) def bfs(self): result = []