#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author: bt3gl class Node(object): def __init__(self, value): self.value = value self.right = None self.left = None def add(self, value): new_node = Node(value) if not self.value: self.value = new_node elif not self.left: self.left = new_node elif not self. right: self.right = new_node else: self.left = self.left.add(value) return self def search(self, item): if self.value == item: return True found = False if (self.left and self.left.search(item)) or \ (self.right and self.right.search(item)): found = True return found def preorder(self): yield self.value if self.left: for node in self.left.preorder(): yield node if self.right: for node in self.right.preorder(): yield node def postorder(self): yield self.value if self.left: for node in self.left.postorder(): yield node if self.right: for node in self.right.postorder(): yield node def inorder(self): yield self.value if self.left: for node in self.left.inorder(): yield node if self.right: for node in self.right.inorder(): yield node class BinaryTree(object): def __init__(self): self.root = None def add(self, value): if not self.root: self.root = Node(value) else: self.root.add(value) def search(self, item): if self.root: return self.root.search(item) def preorder(self): if self.root: return list(self.root.preorder()) def inorder(self): if self.root: return list(self.root.inorder()) def postorder(self): if self.root: return list(self.root.postorder()) if __name__ == '__main__': print("\n\n🌳🌳🌳 Testing BinaryTree 🌳🌳🌳") bt = BinaryTree() array1 = [4, 1, 4, 6, 7, 9, 10, 5, 11, 5] print(f'\n🟔 Adding {array1} to the tree...') for i in array1: bt.add(i) print(f"🟢 Print the tree preorder: {bt.preorder()}") print(f"🟢 Print the tree inorder: {bt.inorder()}") print(f"🟢 Print the tree postorder: {bt.postorder()}") print(f'\n🟢 Search for node 5: {bt.search(5)}') print(f'āŒ Search for node 15: {bt.search(15)}')