예제 #1
0
 def test_remove_root(self):
     s = test_items_seq(1000)
     tree = AnderssonTree(s)
     self.check_aatree_properties(tree)
     size = len(tree)
     keys = [x[0] for x in s]
     keyset = set(keys)
     while len(keyset) > 0:
         k = tree.root().key
         keyset.remove(k)
         tree.remove(k)
         size -= 1
         self.assertEqual(len(tree), size)
         self.assertEqual(set(tree.keys()), keyset)
         self.check_aatree_properties(tree)
예제 #2
0
    def test_max_btree_level(self):
        def _map_levels(node, level, map_):
            if node is not None:
                map_[node.key] = level
                next_level = level + 1
                _map_levels(node.left, next_level, map_)
                _map_levels(node.right, next_level, map_)

        def _map_bin_tree_levels(root):
            """ level is binary tree level, not AATree level """
            map_ = {}
            _map_levels(root, 0, map_)
            max_level = max(map_.values())
            for k, v in map_.items():
                map_[k] = max_level - map_[k] + 1
            return map_
        keys = range(1, 14)
        tree = AnderssonTree(zip(keys, keys))
        mapping = _map_bin_tree_levels(tree.root())
        maxl = max(mapping.values())
        self.assertEqual(maxl, 5, 'Invalid max level %s!' % maxl)
예제 #3
0
 def test_root(self):
     x = [5, 6, 4]
     tree = AnderssonTree(zip(x, x))
     self.assertEqual(tree.root().key, 5)