From d002a04115d164ee4808875942c9969470ec969d Mon Sep 17 00:00:00 2001 From: Karla Torres Date: Sat, 22 Jan 2022 07:12:35 -0500 Subject: [PATCH] Binary Search Tree Completed. --- binary_search_tree/tree.py | 89 +++++++++++++++++----- tests/__pycache__/__init__.cpython-39.pyc | Bin 152 -> 146 bytes 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..de6f19e 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -14,36 +14,87 @@ class Tree: def __init__(self): self.root = None - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n) + # Space Complexity: O(log n ) + + def add_helper(self, current, key, value): + if current is None: + return TreeNode(key, value) + if current.key >= key: + current.left = self.add_helper(current.left, key, value) + else: + current.right = self.add_helper(current.right, key, value) + return current + def add(self, key, value = None): - pass + if self.root == None: + self.root = TreeNode(key, value) + else: + self.add_helper(self.root, key, value) + - # Time Complexity: - # Space Complexity: + # Time Complexity: O( log n ) + # Space Complexity: O (log 1 ) def find(self, key): - pass + current = self.root + while current: + if current.key == key: + return current.value + elif current.key > key: + current = current.left + else: + current = current.right + + # Time Complexity: O( n ) + # Space Complexity: O( n ) + def inorder_helper(self, current_node, listofvalues): + if not current_node: + return listofvalues + obj = {'key': current_node.key, 'value': current_node.value} + listofvalues.append(obj) + self.inorder_helper(current_node.right, listofvalues) - # Time Complexity: - # Space Complexity: def inorder(self): - pass + listofvalues = [] + return self.inorder_helper(self.root, listofvalues) + + # Time Complexity: O(n) + # Space Complexity: O(n) + def preorder_helper(self, current_node, listofvalues): + if not current_node: + return listofvalues + obj = {'key': current_node.key, 'value': current_node.value} + listofvalues.append(obj) + self.preorder_helper(current_node.left, listofvalues) + self.preorder_helper(current_node.right, listofvalues) + return listofvalues - # Time Complexity: - # Space Complexity: def preorder(self): - pass + listofvalues = [] + return self.preorder_helper(self.root, listofvalues) + + # Time Complexity: O(n) + # Space Complexity: O(n) + def postorder_helper(self, current_node, listofvalues): + if not current_node: + return listofvalues + obj = {'key': current_node.key, 'value':current_node.value} + self.postorder_helper(current_node.left, listofvalues) + self.postorder_helper(current_node.right, listofvalues) + listofvalues.append(obj) - # Time Complexity: - # Space Complexity: def postorder(self): - pass + listofvalues = [] + return self.postorder_helper(self.root, listofvalues) + # Time Complexity: O(n) + # Space Complexity: O(log n) + def height_helper(self, current_node): + if not current_node: + return 0 + return max(self.height_helper(current_node.left), self.height_helper(current_node.right)) + 1 - # Time Complexity: - # Space Complexity: def height(self): - pass - + return self.height_helper(self.root) # # Optional Method # # Time Complexity: diff --git a/tests/__pycache__/__init__.cpython-39.pyc b/tests/__pycache__/__init__.cpython-39.pyc index aa55c2ed2909da5566d50f92972b26b188bfaed0..32c18f4a9b9feb78d00b364ad8fa1f37fda47892 100644 GIT binary patch delta 49 zcmbQiIEj%rk(ZZ?0SJyyeU->Kk=IJXTtBopwWwG>F(pwyB%`#bIG`v$D>b=fVyZC! DP#h0w delta 55 zcmbQlID?Tlk(ZZ?0SE$HIT9Hr@>W3Dm78UC!XB1@?=O!oSCFbN*>L;co>X)SE J7EFvc1^|IL5NH4Z