class DB(object): def __init__(self, f): self.storage = Storage(f) self.tree = BinaryTree(self.storage) def assert_not_closed(self): if self.storage.closed: print("db closed") raise ValueError("db closed") def close(self): self.storage.close() def update(self): self.assert_not_closed() self.tree.update() def __getitem__(self, key): self.assert_not_closed() return self.tree.get(key) def __setitem__(self, key, value): self.assert_not_closed() return self.tree.set(key, value) def __delitem__(self, key): self.assert_not_closed() return self.tree.delete(key) def __contains__(self, key): self.assert_not_closed() try: self[key] except KeyError: return False else: return True def __len__(self): return len(self.tree) def listAll(self): return self.tree.listAll()
def main(): tree = BinaryTree() tree.set('c', 'C') tree.set('h', 'H') tree.set('a', 'A') tree.set('e', 'E') tree.set('f', 'F') tree.set('d', 'D') tree.set('b', 'B') tree.set('k', 'K') tree.set('j', 'J') tree.set('i', 'I') tree.set('g', 'G') tree.set('l', 'L') print('Lookups:') print(tree.get('f')) print(tree.get('b')) print(tree.get('i')) print() print(tree) print() print('DFS preorder:') for key, value in tree.walk_dfs_preorder(): print(key, value) print() print('DFS inorder:') for key, value in tree.walk_dfs_inorder(): print(key, value) print() print('DFS postorder:') for key, value in tree.walk_dfs_postorder(): print(key, value) print() print('BFS:') for key, value in tree.walk_bfs(): print(key, value) print() print('Initial tree:') print(tree) print() print('Remove b:') tree.remove('b') print(tree) print() print('Remove f:') tree.remove('f') print(tree) print() print('Remove h:') tree.remove('h') print(tree) print()