From 71cadd4a21c527117ac19a87247a065516292ce1 Mon Sep 17 00:00:00 2001 From: Andrea Palacios Date: Sun, 23 Jan 2022 19:30:42 -0800 Subject: [PATCH 1/3] all non-optional methods are passing tests --- binary_search_tree/tree.py | 105 ++++++++++++++++++++++++++++++++----- 1 file changed, 93 insertions(+), 12 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..0743e51 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -1,48 +1,127 @@ -class TreeNode: - def __init__(self, key, val = None): - if val == None: - val = key +'''the node stores a key value pair + with the key being how we are sorting and the value being the data + ''' +class TreeNode: + def __init__(self, key, value = None): + # if the value is none the key will be the value + # this allows the tree to just be a tree of integers + if value == None: + value = key self.key = key - self.value = val + self.value = value self.left = None self.right = None - +## tree class with a __init__ function class Tree: def __init__(self): self.root = None + + def add_helper(self, current, key, value): + if not current: + return TreeNode(key,value) + + if key <= current.key: + current.left = self.add_helper(current.left,key,value) + else: + current.right = self.add_helper(current.right,key,value) + return current + # Time Complexity: # Space Complexity: 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: def find(self, key): - pass + current = self.root + while current != None: + if current.key == key: + return current.value + elif key < current.key: + current = current.left + else: + current = current.right + + return None + + # Time Complexity: # Space Complexity: def inorder(self): - pass + tree_nodes = [] + return self.inorder_helper(self.root, tree_nodes) + + def inorder_helper(self, root, tree_nodes): + if root: + self.inorder_helper(root.left, tree_nodes) + tree_nodes.append({ + "key":root.key, + "value":root.value + }) + self.inorder_helper(root.right, tree_nodes) + return tree_nodes + # Time Complexity: # Space Complexity: def preorder(self): - pass + tree_nodes = [] + return self.preorder_helper(self.root, tree_nodes) + + def preorder_helper(self, root, tree_nodes): + if root: + tree_nodes.append({ + "key":root.key, + "value":root.value + }) + self.preorder_helper(root.left, tree_nodes) + self.preorder_helper(root.right, tree_nodes) + return tree_nodes + + # Time Complexity: # Space Complexity: def postorder(self): - pass + tree_nodes = [] + return self.postorder_helper(self.root, tree_nodes) + + def postorder_helper(self, root, tree_nodes): + if root: + self.postorder_helper(root.left, tree_nodes) + self.postorder_helper(root.right, tree_nodes) + tree_nodes.append({ + "key":root.key, + "value":root.value + }) + return tree_nodes # Time Complexity: # Space Complexity: def height(self): - pass + return self.height_helper(self.root) + + def height_helper(self, current): + if not current: + return 0 + + left = self.height_helper(current.left) + right = self.height_helper(current.right) + return max(left, right)+1 + + # # Optional Method @@ -57,3 +136,5 @@ def bfs(self): # # Useful for printing def to_s(self): return f"{self.inorder()}" + + From 2704a6ff5d805327fa89a7332255cdf1276ac5ef Mon Sep 17 00:00:00 2001 From: Andrea Palacios Date: Sun, 23 Jan 2022 19:31:51 -0800 Subject: [PATCH 2/3] added time and space complexity --- binary_search_tree/tree.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 0743e51..005fd89 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -30,8 +30,8 @@ def add_helper(self, current, key, value): return current - # 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) @@ -41,8 +41,8 @@ def add(self, key, value = None): - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def find(self, key): current = self.root while current != None: @@ -57,8 +57,8 @@ def find(self, key): - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def inorder(self): tree_nodes = [] return self.inorder_helper(self.root, tree_nodes) @@ -74,8 +74,8 @@ def inorder_helper(self, root, tree_nodes): return tree_nodes - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def preorder(self): tree_nodes = [] return self.preorder_helper(self.root, tree_nodes) @@ -92,8 +92,8 @@ def preorder_helper(self, root, tree_nodes): - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(n) def postorder(self): tree_nodes = [] return self.postorder_helper(self.root, tree_nodes) @@ -108,8 +108,8 @@ def postorder_helper(self, root, tree_nodes): }) return tree_nodes - # Time Complexity: - # Space Complexity: + # Time Complexity: O(n) + # Space Complexity: O(h) def height(self): return self.height_helper(self.root) From 08f25e9016ebe911f4d0afa84b0f33c8b16e7a32 Mon Sep 17 00:00:00 2001 From: Andrea Palacios Date: Sun, 23 Jan 2022 19:37:51 -0800 Subject: [PATCH 3/3] deleted comments adn extra spaces --- binary_search_tree/tree.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index 005fd89..b7a71ef 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -1,10 +1,6 @@ -'''the node stores a key value pair - with the key being how we are sorting and the value being the data - ''' + class TreeNode: def __init__(self, key, value = None): - # if the value is none the key will be the value - # this allows the tree to just be a tree of integers if value == None: value = key @@ -12,9 +8,7 @@ def __init__(self, key, value = None): self.value = value self.left = None self.right = None - -## tree class with a __init__ function class Tree: def __init__(self): self.root = None @@ -22,7 +16,6 @@ def __init__(self): def add_helper(self, current, key, value): if not current: return TreeNode(key,value) - if key <= current.key: current.left = self.add_helper(current.left,key,value) else: @@ -39,8 +32,6 @@ def add(self, key, value = None): self.add_helper(self.root, key,value) - - # Time Complexity: O(n) # Space Complexity: O(n) def find(self, key): @@ -52,11 +43,8 @@ def find(self, key): current = current.left else: current = current.right - return None - - # Time Complexity: O(n) # Space Complexity: O(n) def inorder(self):