From 8e6c2ed2b995d2750f5d6ae87a1570525213ca92 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Thu, 27 Oct 2016 17:08:01 +0100 Subject: [PATCH 1/9] dibs: implement binary-search-tree From 6e4605826b8b31984474523e535b894481062f91 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Thu, 27 Oct 2016 18:29:00 +0100 Subject: [PATCH 2/9] binary-search-tree: including data structure and test file --- .../binary_search_tree_test.py | 7 +++ exercises/binary-search-tree/example.py | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 exercises/binary-search-tree/binary_search_tree_test.py create mode 100644 exercises/binary-search-tree/example.py diff --git a/exercises/binary-search-tree/binary_search_tree_test.py b/exercises/binary-search-tree/binary_search_tree_test.py new file mode 100644 index 0000000000..824123021a --- /dev/null +++ b/exercises/binary-search-tree/binary_search_tree_test.py @@ -0,0 +1,7 @@ +import unittest + +# from binary_search_tree import BST + + +class BSTTests(unittest.TestCase): + pass diff --git a/exercises/binary-search-tree/example.py b/exercises/binary-search-tree/example.py new file mode 100644 index 0000000000..c9d451ba6d --- /dev/null +++ b/exercises/binary-search-tree/example.py @@ -0,0 +1,43 @@ +class Node(object): + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + +class BST(object): + def __init__(self, root): + self.root = Node(root) + + def insert(self, new_val): + if new_val > self.root.value: + if self.root.right is None: + self.root.right = Node(new_val) + else: + self.pre_insert(self.root.right, new_val) + elif new_val < self.root.value: + if self.root.left is None: + self.root.left = Node(new_val) + else: + self.pre_insert(self.root.left, new_val) + + def pre_insert(self, node, val): + if node.right is None and val > node.value: + node.right = Node(val) + elif node.left is None and val < node.value: + node.left = Node(val) + elif val > node.value: + self.pre_insert(node.right, val) + else: + self.pre_insert(node.left, val) + + def search(self, find_val): + current = self.root + while current.left is not None or current.right is not None: + if find_val == current.value: + return True + elif find_val > current.value: + current = current.right + else: + current = current.left + return False From 6b3aed6b9c0144c1a2fc34e5a8e0708ae8a5230c Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Thu, 27 Oct 2016 18:31:42 +0100 Subject: [PATCH 3/9] including bst in config.json --- config.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config.json b/config.json index 188b16e5b9..d74663eef7 100644 --- a/config.json +++ b/config.json @@ -411,6 +411,12 @@ "difficulty": 1, "topics": [ ] + }, + { + "slug": "binary-search-tree", + "difficulty": 1, + "topics": [ + ] } ], "deprecated": [ From e2f7b447a4b73235c0fe70fd17c23a34d3c463d4 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Thu, 27 Oct 2016 18:29:00 +0100 Subject: [PATCH 4/9] binary-search-tree: including data structure and test file --- .../binary_search_tree_test.py | 7 +++ exercises/binary-search-tree/example.py | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 exercises/binary-search-tree/binary_search_tree_test.py create mode 100644 exercises/binary-search-tree/example.py diff --git a/exercises/binary-search-tree/binary_search_tree_test.py b/exercises/binary-search-tree/binary_search_tree_test.py new file mode 100644 index 0000000000..824123021a --- /dev/null +++ b/exercises/binary-search-tree/binary_search_tree_test.py @@ -0,0 +1,7 @@ +import unittest + +# from binary_search_tree import BST + + +class BSTTests(unittest.TestCase): + pass diff --git a/exercises/binary-search-tree/example.py b/exercises/binary-search-tree/example.py new file mode 100644 index 0000000000..c9d451ba6d --- /dev/null +++ b/exercises/binary-search-tree/example.py @@ -0,0 +1,43 @@ +class Node(object): + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + +class BST(object): + def __init__(self, root): + self.root = Node(root) + + def insert(self, new_val): + if new_val > self.root.value: + if self.root.right is None: + self.root.right = Node(new_val) + else: + self.pre_insert(self.root.right, new_val) + elif new_val < self.root.value: + if self.root.left is None: + self.root.left = Node(new_val) + else: + self.pre_insert(self.root.left, new_val) + + def pre_insert(self, node, val): + if node.right is None and val > node.value: + node.right = Node(val) + elif node.left is None and val < node.value: + node.left = Node(val) + elif val > node.value: + self.pre_insert(node.right, val) + else: + self.pre_insert(node.left, val) + + def search(self, find_val): + current = self.root + while current.left is not None or current.right is not None: + if find_val == current.value: + return True + elif find_val > current.value: + current = current.right + else: + current = current.left + return False From a5070bc2e24fa4f789e40c07209015bc406c84f5 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Thu, 27 Oct 2016 18:31:42 +0100 Subject: [PATCH 5/9] including bst in config.json --- config.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config.json b/config.json index ccb1c726ba..c6ccd855b1 100644 --- a/config.json +++ b/config.json @@ -429,6 +429,12 @@ "difficulty": 1, "topics": [ ] + }, + { + "slug": "binary-search-tree", + "difficulty": 1, + "topics": [ + ] } ], "deprecated": [ From dcae81e9887bf13173400b4406cf7c5ee2aee8e3 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Mon, 31 Oct 2016 09:45:58 +0000 Subject: [PATCH 6/9] including insert and search test --- .../binary_search_tree_test.py | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/exercises/binary-search-tree/binary_search_tree_test.py b/exercises/binary-search-tree/binary_search_tree_test.py index 824123021a..d60c47e9b3 100644 --- a/exercises/binary-search-tree/binary_search_tree_test.py +++ b/exercises/binary-search-tree/binary_search_tree_test.py @@ -1,7 +1,26 @@ import unittest -# from binary_search_tree import BST - +from binary_search_tree import BST class BSTTests(unittest.TestCase): - pass + def setUp(self): + self.tree = BST(4) + + def test_insert(self): + self.tree.insert(2) + self.tree.insert(1) + self.tree.insert(3) + self.tree.insert(5) + self.assertEqual(True, self.tree.search(2)) + self.assertEqual(True, self.tree.search(1)) + self.assertEqual(True, self.tree.search(3)) + self.assertEqual(True, self.tree.search(5)) + + def test_search(self): + self.assertEqual(True, self.tree.search(2)) + self.assertEqual(True, self.tree.search(1)) + self.assertEqual(False, self.tree.search(9)) + self.assertEqual(False, self.tree.search(20)) + +if __name__ == '__main__': + unittest.main() From 26351f5c3e8be15192068dd561cd4e881e0c5616 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Mon, 31 Oct 2016 09:51:59 +0000 Subject: [PATCH 7/9] Fix for flake8 adding one line --- exercises/binary-search-tree/binary_search_tree_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/binary-search-tree/binary_search_tree_test.py b/exercises/binary-search-tree/binary_search_tree_test.py index d60c47e9b3..b0aa0c9370 100644 --- a/exercises/binary-search-tree/binary_search_tree_test.py +++ b/exercises/binary-search-tree/binary_search_tree_test.py @@ -2,6 +2,7 @@ from binary_search_tree import BST + class BSTTests(unittest.TestCase): def setUp(self): self.tree = BST(4) From 3752370ff23f850dd3b974b23bad4cfd1c812e66 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Mon, 31 Oct 2016 10:28:42 +0000 Subject: [PATCH 8/9] fixing search method - looks afterwards for empty leaves --- .../binary_search_tree_test.py | 18 ++++++++---------- exercises/binary-search-tree/example.py | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/exercises/binary-search-tree/binary_search_tree_test.py b/exercises/binary-search-tree/binary_search_tree_test.py index b0aa0c9370..08be53197d 100644 --- a/exercises/binary-search-tree/binary_search_tree_test.py +++ b/exercises/binary-search-tree/binary_search_tree_test.py @@ -10,18 +10,16 @@ def setUp(self): def test_insert(self): self.tree.insert(2) self.tree.insert(1) - self.tree.insert(3) - self.tree.insert(5) - self.assertEqual(True, self.tree.search(2)) - self.assertEqual(True, self.tree.search(1)) - self.assertEqual(True, self.tree.search(3)) - self.assertEqual(True, self.tree.search(5)) + self.assertTrue(self.tree.search(2)) + self.assertTrue(self.tree.search(1)) def test_search(self): - self.assertEqual(True, self.tree.search(2)) - self.assertEqual(True, self.tree.search(1)) - self.assertEqual(False, self.tree.search(9)) - self.assertEqual(False, self.tree.search(20)) + self.tree.insert(2) + self.tree.insert(1) + self.assertTrue(self.tree.search(2)) + self.assertTrue(self.tree.search(1)) + self.assertFalse(self.tree.search(9)) + self.assertFalse(self.tree.search(20)) if __name__ == '__main__': unittest.main() diff --git a/exercises/binary-search-tree/example.py b/exercises/binary-search-tree/example.py index c9d451ba6d..baff090459 100644 --- a/exercises/binary-search-tree/example.py +++ b/exercises/binary-search-tree/example.py @@ -33,11 +33,19 @@ def pre_insert(self, node, val): def search(self, find_val): current = self.root - while current.left is not None or current.right is not None: + if find_val == current.value: + return True + else: + while current.left is not None or current.right is not None: + if find_val == current.value: + return True + elif find_val > current.value and current.right is not None: + current = current.right + elif find_val < current.value and current.left is not None: + current = current.left + else: + break + if current.left is None and current.right is None: if find_val == current.value: return True - elif find_val > current.value: - current = current.right - else: - current = current.left return False From 2bda09a2fe684b321971b0b538238a334e751a22 Mon Sep 17 00:00:00 2001 From: laurauzcategui Date: Mon, 31 Oct 2016 10:33:42 +0000 Subject: [PATCH 9/9] remove the duplicate exercise at config.json --- config.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/config.json b/config.json index de10f728f0..c6ccd855b1 100644 --- a/config.json +++ b/config.json @@ -430,12 +430,6 @@ "topics": [ ] }, - { - "slug": "binary-search-tree", - "difficulty": 1, - "topics": [ - ] - }, { "slug": "binary-search-tree", "difficulty": 1,