PYTHON: Runtime Analysis & BST
a2bst-test.py
from a2bst import * # create art instances art1 = art(1234, 'summer', 568.90, 'painting') art2 = art(1235, 'fall', 569.90, 'drawing') art3 = art(1236, 'girl', 89.90, 'painting') # create binary search tree and insert art objects bst = bst() bst.insert(art1) bst.insert(art2) bst.insert(art3) # traverse tree in order and print art values bst.traverse() # find and print art object based on key value print() print(bst.finditem(1234))
a2bst.py
class art: def __init__(self, serial, name, price, type): self.serial = serial self.name = name self.price = price self.type = type @property def key(self): return self.serial def __str__(self): return 'serial={} name={} price={} type={}'.format(self.serial, self.name, self.price, self.type) class node: def __init__(self, nitem): self.item = nitem self.left = None self.right = None @property def key(self): return self.item.key class bst: def __init__(self): self.root = None def finditem(self, key): n = self.findR(self.root, key) if n is None: raise ValueError('Item cannot be found with the given key!') return n.item def findR(self, root, key): if root is None: return root if root.key == key: return root if key > root.key: return self.findR(root.right, key) if key < root.key: return self.findR(root.left, key) def insert(self, data): if self.findR(self.root, data.key) is not None: raise ValueError('Object exists : Cannot insert duplicate object into tree') else: self.root = self.insertR(self.root, data) def insertR(self, root, key): n = node(key) if root is None: root = n if n.key < root.key: root.left = self.insertR(root.left, key) if n.key > root.key: root.right = self.insertR(root.right, key) return root def traverse(self): self.traverse_in_orderR(self.root) def traverse_in_orderR(self, root): if root is not None: self.traverse_in_orderR(root.left) print(root.item) self.traverse_in_orderR(root.right)
a2sort.py
def sort1a(nlist): size = len(nlist) for i in range(size): for j in range(size-1): if nlist[j] > nlist[j+1]: nlist[j], nlist[j+1] = nlist[j+1], nlist[j] return nlist def sort1b(nlist): size = len(nlist) change = False for i in range(size): if not change and i > 500: break for j in range(size-i-1): if nlist[j] > nlist[j+1]: nlist[j], nlist[j+1] = nlist[j+1], nlist[j] change = True return nlist