Lecture Notes on 01 Apr 2022 class Node (object): def __init__ (self, data): self.data = data self.lc = None self.rc = None # self.parent = None # self.visited = False class Tree (object): def __init__ (self): self.root = None # self.num_nodes = 0 # insert data into the tree def insert_node (self, data): new_node = Node (data) if (self.root == None): self.root = new_node return current = self.root parent = self.root while (current != None): parent = current if (data < current.data): current = current.lc else: current = current.rc if (data < parent.data) parent.lc = new_node else: parent.rc = new_node # search for a node with given data def search_node (self, data): current = self.root while (current != None) and (current.data != data): if (data < current.data): current = current.lc else: current = current.rc return current # iorder traversal - left, center, right def in_order (self, aNode): if (aNode != None): self.in_order (aNode.lc) print (aNode.data) self.in_order (aNode.rc) # preorder traversal - center, left, right def pre_order (self, aNode): if (aNode != None): print (aNode.data) self.pre_order (aNode.lc) self.pre_order (aNode.rc) # postorder traversal - left, right, center def post_order (self, aNode): if (aNode != None): self.post_order (aNode.lc) self.post_order (aNode.rc) print (aNode.data) # find the node with the smallest value def min_node (self): current = self.root parent = self.root while (current != None): parent = current current = current.lc return parent # find the node with the largest value def max_node (self): current = self.root parent = self.root while (current != None): parent = current current = current.rc return parent