# 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)