コード例 #1
0
class Splay_Tree__Test_Inorder_Traversal_with_Stack_on_10_Node_Tree(
        unittest.TestCase):
    def setUp(self):
        self._splaytree = SplayTree()
        self._splaytree.insert(key=5, obj=5)
        self._splaytree.insert(key=8, obj=8)
        self._splaytree.insert(key=7, obj=7)
        self._splaytree.insert(key=9, obj=9)
        self._splaytree.insert(key=10, obj=10)
        self._splaytree.insert(key=2, obj=2)
        self._splaytree.insert(key=1, obj=1)
        self._splaytree.insert(key=3, obj=3)
        self._splaytree.insert(key=4, obj=4)
        self._splaytree.insert(key=6, obj=6)

    def test_inorder_traversal_with_10_node_tree(self):
        in_order_elements = []
        for key, element in self._splaytree.inorder_traversal_with_stack():
            in_order_elements.append(element)
        self.assertEqual(
            10, len(in_order_elements),
            'In order traversal on 10 node tree must yield 10 elements')
        self.assertEqual(
            in_order_elements, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
            'In order traversal did not yield expected elements in order')

    def tearDown(self):
        self._splaytree = None
コード例 #2
0
class Splay_Tree__Test_Inorder_Traversal_Using_Stack_with_empty_Tree(
        unittest.TestCase):
    def setUp(self):
        self._splaytree = SplayTree()

    def test_inorder_traversal_with_empty_tree(self):
        in_order_elements = []
        for key, element in self._splaytree.inorder_traversal_with_stack():
            in_order_elements.append(element)
        self.assertEqual(
            0, len(in_order_elements),
            'In order traversal on empty tree must yield no elements')

    def tearDown(self):
        self._splaytree = None
コード例 #3
0
class SplayedHashBucket(collections.MutableMapping):
    '''
    A hash bucket is used to hold objects that hash to the same value in a hash table. 
    This is hash bucket using a splay tree. This masquerades as a python dict in code 
    where it is used. Since splat tree is used lookups on avg take Olog(n)
    
    Note: HASHBUCKET ITERATION YIELDS KEYS. not the key value pairs in the bucket. 
    '''
    def __init__(self):
        self._st = SplayTree()
    
    def __len__(self):
        return self._st.node_count
    
    def get(self, key, default = None):
        '''
        Get object associated with a key and on key miss return specified default. This is 
        there in Python dict and this class masquerades as dict, we implement it.
        '''
        try:
            value = self[key]
            return value
        except KeyError:
            return default            
    
    def __getitem__(self, key):
        value = self._st.find(key)
        if value == None:
            raise KeyError('Key Error: %s ' % repr(key))
        return value
        
    def __delitem__(self, key):
        if key in self._st:
            self._st.remove(key)
        else:
            raise KeyError('Key Error: %s ' % repr(key))
        
    def __setitem__(self, key, obj):
        if key in self._st:
            self._st.replace(key, obj)
        else:
            self._st.insert(key, obj)
            
    def __iter__(self):
        for key, value in self._st.inorder_traversal_with_stack():
            yield key
コード例 #4
0
class Splay_Tree__Test_Inorder_Traversal_with_Stack_On_Single_Node_Tree(
        unittest.TestCase):
    def setUp(self):
        self._splaytree = SplayTree()
        self._splaytree.insert(key=10, obj=10)

    def test_inorder_traversal_with_single_node_tree(self):
        in_order_elements = []
        for key, element in self._splaytree.inorder_traversal_with_stack():
            in_order_elements.append(element)
        self.assertEqual(
            1, len(in_order_elements),
            'In order traversal on single node tree must yield one elements')
        self.assertEqual(
            in_order_elements, [10],
            'In order traversal did not yield expected elements in order')

    def tearDown(self):
        self._splaytree = None