commit 3a53adfd791468b19af61b19712bbc9914689c1b Author: The-Tysonator Date: Sun Apr 23 16:48:48 2023 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b7ff13a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_STORE \ No newline at end of file diff --git a/data/numbers.txt b/data/numbers.txt new file mode 100755 index 0000000..7024a7c --- /dev/null +++ b/data/numbers.txt @@ -0,0 +1,16 @@ +2 +3 +6 +9 +11 +14 +18 +21 +27 +37 +834 +9333 +93403 +349202 +2349025 +32568538 \ No newline at end of file diff --git a/data/string.txt b/data/string.txt new file mode 100755 index 0000000..4ff3881 --- /dev/null +++ b/data/string.txt @@ -0,0 +1,7 @@ +klasdjf; +dsafasf +adsfasfd +hello +adsfasfdasdf +adsfasfdasdfad +adsfasfd \ No newline at end of file diff --git a/search.py b/search.py new file mode 100755 index 0000000..ed34d0d --- /dev/null +++ b/search.py @@ -0,0 +1,107 @@ +# Linear Search +def linearSearch ( data, target ): + for index, dataItem in enumerate(data): + if dataItem == target: + return index + return None + +# Binary Search +def binarySearch (data, target ): + while True: + dataItem = data[len(data)//2] + if dataItem == target: + return len(data)//2 + elif dataItem < target: + data = data[len(data)//2:] + elif dataItem > target: + data = data[:len(data)//2] + elif len(data) == 1: + return None + +# Node Class +class Node: + # Constructor + def __init__(self, value): + self.value = value + self.leftNode = None + self.rightNode = None + +# Binary Tree Class +class BinaryTree: + # Constructor + def __init__(self, value): + self.tree = Node(value) + # Traverse + @staticmethod + def __traverse(node, directions): + for direction in directions: + if direction == "left": + node = node.leftNode + if direction == "right": + node = node.rightNode + return node + # Add Node + def add_node(self, value): + tree = self.tree + while True: + if value > tree.value: + if tree.rightNode is None: + tree.rightNode = Node(value) + break + else: + tree = self.__traverse(tree, ["right"]) + if value < tree.value or value == tree.value: + if tree.leftNode is None: + tree.leftNode = Node(value) + break + else: + tree = self.__traverse(tree, ["left"]) + # Left Branch + @staticmethod + def __left_branch(node_tree): + if node_tree.leftNode is not None: + print(f"Parent: {node_tree.value}, Left Child: {node_tree.leftNode.value}") + return node_tree.leftNode + return None + # Right Branch + @staticmethod + def __right_branch(node_tree): + if node_tree.rightNode is not None: + print(f"Parent: {node_tree.value}, Right Child: {node_tree.rightNode.value}") + return node_tree.rightNode + return None + # Display Tree + def display_tree(self, node_tree): + left_node = self.__left_branch(node_tree) + right_node = self.__right_branch(node_tree) + if left_node is not None: + self.display_tree(left_node) + if right_node is not None: + self.display_tree(right_node) + +# Read Data +with open("./data/string.txt", "r") as file: + textArray = file.read().split("\n") +with open("./data/numbers.txt", "r") as file: + numberArray = file.read().split("\n") +for itemIndex, item in enumerate(numberArray): + numberArray[itemIndex] = int(item) + +# Searches +print(linearSearch(textArray, "hello")) +print(binarySearch(numberArray, 11)) + +# Binary Tree +tree = BinaryTree(0) +tree.add_node(8) +tree.add_node(-4) +tree.add_node(-1) +tree.add_node(10) +tree.add_node(-6) +tree.add_node(-5) +tree.add_node(7) +tree.add_node(11) +tree.add_node(0) +tree.add_node(69) +tree.add_node(68) +tree.display_tree(tree.tree) \ No newline at end of file