From 5cbe06269f151ce489df84b96a89b4e9510558d6 Mon Sep 17 00:00:00 2001 From: Juliana DeCarvalho Sutherland Date: Mon, 27 Dec 2021 20:24:04 -0800 Subject: [PATCH] Tree exercise complete --- binary_search_tree/tree.py | 102 +++++++++++++++++----- tests/__pycache__/__init__.cpython-39.pyc | Bin 152 -> 157 bytes 2 files changed, 78 insertions(+), 24 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..3bf7eb1 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -7,42 +7,99 @@ def __init__(self, key, val = None): self.value = val self.left = None self.right = None - - - +# we need to sort the values by key, or else v and k will remain the same. class Tree: def __init__(self): self.root = None - # Time Complexity: - # Space Complexity: + # Time Complexity: O(log n) + # Space Complexity: O(1) def add(self, key, value = None): - pass + n_node = TreeNode(key, value) + if not self.root: + self.root = n_node + return None + current = self.root + + while True: + if current.key > key and current.left is None: + current.left = n_node + return None + elif current.key <= key and current.right is None: + current.right = n_node + return None + elif current.key > key: + current = current.left + else: + current = current.left + - # Time Complexity: - # Space Complexity: + # 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 current.key > key: + current = current.left + else: current = current.right + return None + - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder(self): - pass + trees = [] + return self.awesome_helper_inorder(self.root, trees) + + def awesome_helper_inorder(self, current, trees): + if not current: + return trees + curr_storage = {"key": current.key, "value": current.value} + + self.awesome_helper_inorder(current.left, trees) + trees.append(curr_storage) + self.awesome_helper_inorder(current.right, trees) - # Time Complexity: - # Space Complexity: + return trees + + # Time Complexity: O(n) + # Space Complexity:O(n) def preorder(self): - pass + if not self.root: + return [] + left = Tree() + left.root = self.root.left + right = Tree() + right.root = self.root.right + + return [{"key": self.root.key, "value": self.root.value}] + left.preorder() + right.preorder() - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder(self): - pass + if not self.root: + return [] + + left = Tree() + left.root = self.root.left + right = Tree() + right.root = self.root.right - # Time Complexity: - # Space Complexity: + return left.postorder() + right.postorder() + [{"key": self.root.key, "value": self.root.value}] + + # Time Complexity: O(log n) + # Space Complexity: O(n) def height(self): - pass + if not self.root: + return 0 + left = Tree() + left.root = self.root.left + right = Tree() + right.root = self.root.right + + return max(left.heigh(),right.height()) +1 # # Optional Method @@ -51,9 +108,6 @@ def height(self): def bfs(self): pass - - - # # Useful for printing def to_s(self): return f"{self.inorder()}" diff --git a/tests/__pycache__/__init__.cpython-39.pyc b/tests/__pycache__/__init__.cpython-39.pyc index aa55c2ed2909da5566d50f92972b26b188bfaed0..b3745fdc9911b4b5327d1c975c3c91ef0fd1cd6d 100644 GIT binary patch delta 60 zcmbQiIG2$(k(ZZ?0SK7S=Oi*tW3Dm78UC!XB1@?=O!oSCFbN*>L;co>X)SE J7EH`C1^|Pr5Pkpv