Example #1
0
def test_binary_search_tree():
    # Create a complete binary search tree of 3, 7, or 15 items in level-order
    # items = [2, 1, 3]
    items = [4, 2, 6, 1, 3, 5, 7]
    # items = [8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15]
    print('items: {}'.format(items))

    tree = BinarySearchTree()
    print('tree: {}'.format(tree))
    print('root: {}'.format(tree.root))

    print('\nInserting items:')
    for item in items:
        tree.insert(item)
        print('insert({}), size: {}'.format(item, tree.size))
    print('root: {}'.format(tree.root))

    print('\nSearching for items:')
    for item in items:
        result = tree.search(item)
        print('search({}): {}'.format(item, result))
    item = 123
    result = tree.search(item)
    print('search({}): {}'.format(item, result))

    print('\nTraversing items:')
    print('items in-order:    {}'.format(tree.items_in_order()))
    print('items pre-order:   {}'.format(tree.items_pre_order()))
    print('items post-order:  {}'.format(tree.items_post_order()))
    print('items level-order: {}'.format(tree.items_level_order()))
class TreeMap:

    def __init__(self):
        self.tree = BinaryTree()
        self.size = 0

    def __str__(self):
        """Return a formatted string representation of cursed tree map."""
        items = ['{!r}: {!r}'.format(key, val) for key, val in self.items()]
        return '{' + ', '.join(items) + '}'

    def __repr__(self):
        """Return a string representation of this cursed tree map."""
        return 'TreeMap({!r})'.format(self.items())

    def items(self):
        items = self.tree.items_in_order()
        retlist = []
        for item in items:
            retlist.append((item.key, item.value))
        return retlist

    def keys(self):
        items = self.tree.items_in_order()
        for item in items:
            yield item.key

    def set(self, key, value):
        self.tree.set_insert(KeyValuePackage(key, value))

    def get(self, key):
        return self.tree.search(key).value

    def contains(self, key):
        return self.tree.contains(key)

    def delete(self, key):
        self.tree.delete(key)