From 2e9cf9314b886f0a0e8b5345f59f7f32b9fc3cbd Mon Sep 17 00:00:00 2001 From: Lux Barker Date: Thu, 16 Jun 2022 10:31:23 -0700 Subject: [PATCH 1/3] Complete required methods to pass tests --- binary_search_tree/tree.py | 77 +++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index cdd5abc..d7470e9 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -7,7 +7,7 @@ def __init__(self, key, val = None): self.value = val self.left = None self.right = None - + class Tree: @@ -17,41 +17,92 @@ def __init__(self): # Time Complexity: # Space Complexity: def add(self, key, value = None): - pass + new_node = TreeNode(key, value) + if self.root is None: + self.root = new_node + return self.root + return self.add_helper(self.root, new_node) + + def add_helper(self, curr, new_node): + if curr is None: + curr = new_node + elif new_node.key < curr.key: + curr.left = self.add_helper(curr.left, new_node) + else: + curr.right = self.add_helper(curr.right, new_node) + return curr # Time Complexity: # Space Complexity: def find(self, key): - pass + return self.find_helper(self.root, key) + + def find_helper(self, curr, key): + if curr is None: + return None + if curr.key == key: + return curr.value + if key < curr.key: + return self.find_helper(curr.left, key) + return self.find_helper(curr.right, key) # Time Complexity: # Space Complexity: def inorder(self): - pass + arr = [] + self.inorder_helper(self.root, arr) + return arr - # Time Complexity: + def inorder_helper(self, curr, arr): + if curr is not None: + self.inorder_helper(curr.left, arr) + arr.append({"key": curr.key, "value": curr.value}) + self.inorder_helper(curr.right, arr) + + # Time Complexity: # Space Complexity: def preorder(self): - pass + arr = [] + self.preorder_helper(self.root, arr) + return arr - # Time Complexity: + def preorder_helper(self, curr, arr): + if curr is not None: + arr.append({"key": curr.key, "value": curr.value}) + self.preorder_helper(curr.left, arr) + self.preorder_helper(curr.right, arr) + # Time Complexity: # Space Complexity: def postorder(self): - pass + arr = [] + self.postorder_helper(self.root, arr) + return arr + + def postorder_helper(self, curr, arr): + if curr is not None: + self.postorder_helper(curr.left, arr) + self.postorder_helper(curr.right, arr) + arr.append({"key": curr.key, "value": curr.value}) # Time Complexity: # Space Complexity: def height(self): - pass + return self.height_helper(self.root, 0) + def height_helper(self, curr, count): + if curr is None: + return count + left_height = self.height_helper(curr.left, count + 1) + right_height = self.height_helper(curr.right, count + 1) + return max(left_height, right_height) -# # Optional Method -# # Time Complexity: -# # Space Complexity: + # Optional Method + # Time Complexity: + # Space Complexity: def bfs(self): pass - + # # Useful for printing From 5abf5ce0be32ea081875ca5b71c1086c15ed0d23 Mon Sep 17 00:00:00 2001 From: Lux Barker Date: Thu, 16 Jun 2022 10:47:14 -0700 Subject: [PATCH 2/3] pass BFS test --- binary_search_tree/tree.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index d7470e9..b6bdcda 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -1,3 +1,5 @@ +import collections +from collections import deque class TreeNode: def __init__(self, key, val = None): if val == None: @@ -100,8 +102,19 @@ def height_helper(self, curr, count): # Time Complexity: # Space Complexity: def bfs(self): - pass - + visited = [] + if self.root is None: + return visited + q = collections.deque() + q.append(self.root) + while q: + curr = q.popleft() + visited.append({"key": curr.key, "value": curr.value}) + if curr.left is not None: + q.append(curr.left) + if curr.right is not None: + q.append(curr.right) + return visited From 78f879c22ab325ca71b37957039549165b98e190 Mon Sep 17 00:00:00 2001 From: Lux Barker Date: Thu, 16 Jun 2022 10:49:23 -0700 Subject: [PATCH 3/3] remove redundant import --- binary_search_tree/tree.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/binary_search_tree/tree.py b/binary_search_tree/tree.py index b6bdcda..e9eb3b6 100644 --- a/binary_search_tree/tree.py +++ b/binary_search_tree/tree.py @@ -1,4 +1,3 @@ -import collections from collections import deque class TreeNode: def __init__(self, key, val = None): @@ -105,7 +104,7 @@ def bfs(self): visited = [] if self.root is None: return visited - q = collections.deque() + q = deque() q.append(self.root) while q: curr = q.popleft()