From 53500b7b04c14c204b37f06d9e9e5c206c526dd6 Mon Sep 17 00:00:00 2001 From: Suyash Dongre <109069262+Suyashd999@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:35:10 +0530 Subject: [PATCH 1/3] Added doctest to binary_search_tree.py --- .../binary_tree/binary_search_tree.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/data_structures/binary_tree/binary_search_tree.py b/data_structures/binary_tree/binary_search_tree.py index f08f278a8e47..428a4169be01 100644 --- a/data_structures/binary_tree/binary_search_tree.py +++ b/data_structures/binary_tree/binary_search_tree.py @@ -198,6 +198,30 @@ def insert(self, *values) -> Self: return self def search(self, value) -> Node | None: + """ + >>> bst = BinarySearchTree().insert(10,20,30,40,50) + >>> bst.search(10) + {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} + >>> bst.search(20) + {'20': (None, {'30': (None, {'40': (None, 50)})})} + >>> bst.search(30) + {'30': (None, {'40': (None, 50)})} + >>> bst.search(40) + {'40': (None, 50)} + >>> bst.search(50) + 50 + >>> bst.search(0) # element not present + + >>> bst.search(-5 ) # element not present + + >>> bst.search(5) # element not present + + >>> bst= BinarySearchTree().search(10) + Traceback (most recent call last): + ... + IndexError: Warning: Tree is empty! please use another. + """ + if self.empty(): raise IndexError("Warning: Tree is empty! please use another.") else: @@ -210,6 +234,15 @@ def search(self, value) -> Node | None: def get_max(self, node: Node | None = None) -> Node | None: """ We go deep on the right branch + + >>> BinarySearchTree().insert(10,20,30,40,50).get_max() + 50 + >>> BinarySearchTree().insert(-5,-1,0,-0.3,-4.5).get_max() + {'0': (-0.3, None)} + >>> BinarySearchTree().insert(1,78.3,30,74.0,1).get_max() + {'78.3': ({'30': (1, 74.0)}, None)} + >>> BinarySearchTree().insert(1,783,30,740,1).get_max() + {'783': ({'30': (1, 740)}, None)} """ if node is None: if self.root is None: @@ -224,6 +257,15 @@ def get_max(self, node: Node | None = None) -> Node | None: def get_min(self, node: Node | None = None) -> Node | None: """ We go deep on the left branch + + >>> BinarySearchTree().insert(10,20,30,40,50).get_min() + {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} + >>> BinarySearchTree().insert(-5,-1,0,-0.3,-4.5).get_min() + {'-5': (None, {'-1': (-4.5, {'0': (-0.3, None)})})} + >>> BinarySearchTree().insert(1,78.3,30,74.0,1).get_min() + {'1': (None, {'78.3': ({'30': (1, 74.0)}, None)})} + >>> BinarySearchTree().insert(1,783,30,740,1).get_min() + {'1': (None, {'783': ({'30': (1, 740)}, None)})} """ if node is None: node = self.root From 1242fcd4982fa2852604bbc8dedfde573d1af103 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 25 Nov 2023 15:20:16 +0100 Subject: [PATCH 2/3] Apply suggestions from code review --- .../binary_tree/binary_search_tree.py | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/data_structures/binary_tree/binary_search_tree.py b/data_structures/binary_tree/binary_search_tree.py index 428a4169be01..25593d9a44f6 100644 --- a/data_structures/binary_tree/binary_search_tree.py +++ b/data_structures/binary_tree/binary_search_tree.py @@ -199,26 +199,26 @@ def insert(self, *values) -> Self: def search(self, value) -> Node | None: """ - >>> bst = BinarySearchTree().insert(10,20,30,40,50) - >>> bst.search(10) + >>> tree = BinarySearchTree().insert(10, 20, 30, 40, 50) + >>> tree.search(10) {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} - >>> bst.search(20) + >>> tree.search(20) {'20': (None, {'30': (None, {'40': (None, 50)})})} - >>> bst.search(30) + >>> tree.search(30) {'30': (None, {'40': (None, 50)})} - >>> bst.search(40) + >>> tree.search(40) {'40': (None, 50)} - >>> bst.search(50) + >>> tree.search(50) 50 - >>> bst.search(0) # element not present - - >>> bst.search(-5 ) # element not present - - >>> bst.search(5) # element not present - - >>> bst= BinarySearchTree().search(10) + >>> bst.search(5) is None # element not present + True + >>> bst.search(0) is None # element not present + True + >>> bst.search(-5) is None # element not present + True + >>> BinarySearchTree().search(10) Traceback (most recent call last): - ... + ... IndexError: Warning: Tree is empty! please use another. """ @@ -235,13 +235,13 @@ def get_max(self, node: Node | None = None) -> Node | None: """ We go deep on the right branch - >>> BinarySearchTree().insert(10,20,30,40,50).get_max() + >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_max() 50 - >>> BinarySearchTree().insert(-5,-1,0,-0.3,-4.5).get_max() - {'0': (-0.3, None)} - >>> BinarySearchTree().insert(1,78.3,30,74.0,1).get_max() + >>> BinarySearchTree().insert(-5, -1, 0.1, -0.3, -4.5).get_max() + {'0.1': (-0.3, None)} + >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_max() {'78.3': ({'30': (1, 74.0)}, None)} - >>> BinarySearchTree().insert(1,783,30,740,1).get_max() + >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_max() {'783': ({'30': (1, 740)}, None)} """ if node is None: @@ -258,13 +258,13 @@ def get_min(self, node: Node | None = None) -> Node | None: """ We go deep on the left branch - >>> BinarySearchTree().insert(10,20,30,40,50).get_min() + >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_min() {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} - >>> BinarySearchTree().insert(-5,-1,0,-0.3,-4.5).get_min() + >>> BinarySearchTree().insert(-5, -1, 0, -0.3, -4.5).get_min() {'-5': (None, {'-1': (-4.5, {'0': (-0.3, None)})})} - >>> BinarySearchTree().insert(1,78.3,30,74.0,1).get_min() + >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_min() {'1': (None, {'78.3': ({'30': (1, 74.0)}, None)})} - >>> BinarySearchTree().insert(1,783,30,740,1).get_min() + >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_min() {'1': (None, {'783': ({'30': (1, 740)}, None)})} """ if node is None: From e9bf9bffec691f737d1e6d7dc76a20874f8afe4b Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 25 Nov 2023 15:26:11 +0100 Subject: [PATCH 3/3] Update data_structures/binary_tree/binary_search_tree.py --- data_structures/binary_tree/binary_search_tree.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data_structures/binary_tree/binary_search_tree.py b/data_structures/binary_tree/binary_search_tree.py index 25593d9a44f6..9071f03dcc8c 100644 --- a/data_structures/binary_tree/binary_search_tree.py +++ b/data_structures/binary_tree/binary_search_tree.py @@ -210,11 +210,11 @@ def search(self, value) -> Node | None: {'40': (None, 50)} >>> tree.search(50) 50 - >>> bst.search(5) is None # element not present + >>> tree.search(5) is None # element not present True - >>> bst.search(0) is None # element not present + >>> tree.search(0) is None # element not present True - >>> bst.search(-5) is None # element not present + >>> tree.search(-5) is None # element not present True >>> BinarySearchTree().search(10) Traceback (most recent call last):