From 85a29921dd31c5047817c6192cc53c77459d58f7 Mon Sep 17 00:00:00 2001 From: Drew Taylor Date: Sun, 12 Dec 2021 21:55:38 -0800 Subject: [PATCH] Finished all but the bts part --- binary_search_tree/tree.py | 115 +++++++++++++++++----- tests/__pycache__/__init__.cpython-39.pyc | Bin 152 -> 153 bytes 2 files changed, 93 insertions(+), 22 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..dd7b3c5 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -1,5 +1,5 @@ class TreeNode: - def __init__(self, key, val = None): + def __init__(self, key, val=None): if val == None: val = key @@ -14,35 +14,108 @@ class Tree: def __init__(self): self.root = None - # Time Complexity: - # Space Complexity: - def add(self, key, value = None): - pass + def add_helper(self, current_node, key, value): + if current_node == None: + return TreeNode(key, value) + if current_node.key > 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: + # Time Complexity: O(log n) + # Space Complexity: O(log n) + def add(self, key, value=None): + if self.root == None: + self.root = TreeNode(key, value) + else: + self.add_helper(self.root, key, value) + + # Time Complexity: O(log n) + # Space Complexity: O(1) def find(self, key): - pass + current = self.root + while current: + if current.key == key: + return current.value + elif key < current.key: + current = current.left + else: + current = current.right + return None + + def inorder_helper(self, root, elements): + if root == None: + return - # Time Complexity: - # Space Complexity: + self.inorder_helper(root.left, elements) + elements.append({"key": root.key, "value": root.value}) + self.inorder_helper(root.right, elements) + return + + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder(self): - pass + if self.root == None: + return [] + + elements = [] + self.inorder_helper(self.root, elements) - # Time Complexity: - # Space Complexity: + return elements + + def preorder_helper(self, root, elements): + if root == None: + return + + elements.append({"key": root.key, "value": root.value}) + self.preorder_helper(root.left, elements) + self.preorder_helper(root.right, elements) + return elements + + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder(self): - pass + if self.root == None: + return [] + + elements = [] + self.preorder_helper(self.root, elements) + return elements - # Time Complexity: - # Space Complexity: + def postorder_helper(self, root, elements): + if root == None: + return + + self.postorder_helper(root.left, elements) + self.postorder_helper(root.right, elements) + elements.append({"key": root.key, "value": root.value}) + + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder(self): - pass + if self.root == None: + return [] + elements = [] + self.postorder_helper(self.root, elements) + return elements + + def height_helper(self, node): + if not node: + return 0 + + left = self.height_helper(node.left) + right = self.height_helper(node.right) - # Time Complexity: - # Space Complexity: + return max(left, right) + 1 + + # Time Complexity: O(n) + # Space Complexity: O(log n) def height(self): - pass + if self.root == None: + return 0 + + return self.height_helper(self.root) # # Optional Method @@ -51,8 +124,6 @@ def height(self): def bfs(self): pass - - # # Useful for printing def to_s(self): diff --git a/tests/__pycache__/__init__.cpython-39.pyc b/tests/__pycache__/__init__.cpython-39.pyc index aa55c2ed2909da5566d50f92972b26b188bfaed0..1c0461a525f0968abb5408841c1e6d377782f584 100644 GIT binary patch delta 56 zcmbQiIFpe#k(ZZ?0SI<33rl32$ZI8Uryp9JT2!o`Qj}V*?~+=Unv-9UTBKi4l%JKF KTv9wS)ffP@xe?0% delta 55 zcmbQqID?Tlk(ZZ?0SE$HIT9Hr@>W3Dm78UC!XB1@?=O!oSCFbN*>L;co>X)SE J7EDYt1^|M`5Ox3n