def test_init_with_list(self):
     tree = AVLTree([2, 1, 3])
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
     assert tree.size == 3
     assert tree.is_empty() is False
 def test_init_with_list_of_tuples(self):
     tree = AVLTree([(2, 'B'), (1, 'A'), (3, 'C')])
     assert tree.root.data == (2, 'B')
     assert tree.root.left.data == (1, 'A')
     assert tree.root.right.data == (3, 'C')
     assert tree.size == 3
     assert tree.is_empty() is False
示例#3
0
 def __init__(self):
     self.price_tree = AVLTree()
     self.price_map = {}
     self.order_map = {}
     self.volume = 0
     self.num_orders = 0
     self.depth = 0
 def test_init_with_list_of_strings(self):
     tree = AVLTree(['B', 'A', 'C'])
     assert tree.root.data == 'B'
     assert tree.root.left.data == 'A'
     assert tree.root.right.data == 'C'
     assert tree.size == 3
     assert tree.is_empty() is False
示例#5
0
def avl_insert(string):
    start = time.clock()
    avl = AVLTree()
    for i in range(num):
        avl.insert(i)
    end = time.clock()
    print string + str(end - start)
示例#6
0
    def test_delitem(self):
        # CASE 1: LEAF - no cascading deletion, left rotation
        a = AVLTree()
        a[20] = 20
        a[10] = 10
        a[30] = 30
        a[5] = 5
        a[15] = 15
        a[29] = 29
        a[40] = 40
        a[8] = 8
        a[28] = 28
        a[35] = 35
        a[50] = 50
        a[60] = 60
        self.assertEqual(a.verbose_string(), 'AVL{5:5:-1, 8:8:0, 10:10:1, 15:15:0, 20:20:-1, 28:28:0, 29:29:1, 30:30:-1, 35:35:0, 40:40:-1, 50:50:-1, 60:60:0, }')
        del a[35]
        self.assertEqual(a.verbose_string(), 'AVL{5:5:-1, 8:8:0, 10:10:1, 15:15:0, 20:20:0, 28:28:0, 29:29:1, 30:30:0, 40:40:0, 50:50:0, 60:60:0, }')
        
        # CASE 2: LEAF - no cascading deletion, right left rotation

        # CASE 3: LEAF - cascading deletion, left following by right predecessor rotation
        a = AVLTree()
        a[20] = 20
        a[10] = 10
        a[30] = 30
        a[5] = 5
        a[15] = 15
        a[29] = 29
        a[40] = 40
        a[3] = 3
        a[8] = 8
        a[13] = 13
        a[18] = 18
        a[28] = 28
        a[35] = 35
        a[50] = 50
        a[2] = 2
        a[9] = 9
        a[12] = 12
        a[14] = 14
        a[19] = 19
        a[60] = 60
        a[11] = 11
        self.assertEqual(a.verbose_string(), 'AVL{2:2:0, 3:3:1, 5:5:0, 8:8:-1, 9:9:0, 10:10:-1, 11:11:0, 12:12:1, 13:13:1, 14:14:0, 15:15:1, 18:18:-1, 19:19:0, 20:20:1, 28:28:0, 29:29:1, 30:30:-1, 35:35:0, 40:40:-1, 50:50:-1, 60:60:0, }')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
        del a[35]
        self.assertEqual(a.verbose_string(), 'AVL{2:2:0, 3:3:1, 5:5:0, 8:8:-1, 9:9:0, 10:10:0, 11:11:0, 12:12:1, 13:13:1, 14:14:0, 15:15:0, 18:18:-1, 19:19:0, 20:20:-1, 28:28:0, 29:29:1, 30:30:0, 40:40:0, 50:50:0, 60:60:0, }')
 def test_size(self):
     tree = AVLTree()
     assert tree.size == 0
     tree.insert('B')
     assert tree.size == 1
     tree.insert('A')
     assert tree.size == 2
     tree.insert('C')
     assert tree.size == 3
示例#8
0
def avl_search(string):
    avl = AVLTree()
    for i in range(num):
        avl.insert(i)
    start = time.clock()
    for i in range(num):
        avl.find(i)
    end = time.clock()
    print string + str(end - start)
 def test_insert_with_7_items(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = AVLTree()
     for item in items:
         tree.insert(item)
     assert tree.root.data == 4
     assert tree.root.left.data == 2
     assert tree.root.right.data == 6
     assert tree.root.left.left.data == 1
     assert tree.root.left.right.data == 3
     assert tree.root.right.left.data == 5
     assert tree.root.right.right.data == 7
示例#10
0
 def initialize(self, queue_length, update_time):
     '''
     **THIS IS A PRIVATE METHOD.**\n
     You should NOT USE IT in most conditions.
     '''
     self.queue_length = queue_length
     self.update_time = update_time
     self.pointer = 0
     self.loop_counter = 0
     # it is not running now
     self.stoped = True
     # create a list with an AVL tree in each node
     self.circular_queue = [
         AVLTree(),
     ] * queue_length
示例#11
0
 def test_insert_with_3_items(self):
     # Create a complete binary search tree of 3 items in level-order
     tree = AVLTree()
     tree.insert(2)
     assert tree.root.data == 2
     assert tree.root.left is None
     assert tree.root.right is None
     tree.insert(1)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right is None
     tree.insert(3)
     assert tree.root.data == 2
     assert tree.root.left.data == 1
     assert tree.root.right.data == 3
示例#12
0
 def run(self):
     '''
     **THIS IS A PRIVATE METHOD.**\n
     You should NOT USE IT in most conditions
     '''
     if self.stoped:
         return None
     try:
         # schedules the next update
         threading.Timer(self.update_time, self.run)
         # deletes all the time out elements
         del (self.circular_queue[self.pointer])
         self.circular_queue.insert(AVLTree())
         # moves the pointer forward
         pointer = (pointer + 1) % self.queue_length
     except Exception as e:
         print(e)
         pass
示例#13
0
def run_case(request_queue, response_queue):
    while True:
        request = request_queue.get()
        id = hash(request)
        input = list(request.input)
        rinput = []
        v = None
        try:
            operations = get_hybrid_operations(input)
            tree = RedBlackTree(
            ) if request.clazz == "RedBlackTree" else AVLTree()
            for o in operations:
                if o.inserting:
                    successful = tree.put(o.key)
                    assert successful
                    assert o.key in tree
                else:
                    assert o.key in tree
                    del tree[o.key]
                    assert o.key not in tree

            for v in input:
                successful = tree.put(v)
                assert successful
                assert v in tree
                assert tree.valid()
            rinput = input[:]
            random.shuffle(rinput)
            for v in rinput:
                assert v in tree
                del tree[v]
                assert v not in tree
                assert tree.valid()
            r = Response(id, True)
            response_queue.put(r)
        except Exception as e:
            r = Response(id, False, input, rinput, v, e)
            response_queue.put(r)
示例#14
0
 def __init__(self):
     self.data = AVLTree()
示例#15
0
    for word in total:
        if word not in bst_map:
            bst_map[word] = 1
        else:
            bst_map[word] += 1

    for word in total:
        word in bst_map
    end = time.time() - start

    print('Total different words:', len(bst_map))
    print('Frequency of pride:', bst_map['pride'])
    print('Frequency of prejudice:', bst_map['prejudice'])
    print('bst-tree map: {:.6f}'.format(end))

    avl_map = AVLTree()

    print()
    print('Total words:', len(total))

    start = time.time()
    for word in total:
        if word not in avl_map:
            avl_map[word] = 1
        else:
            avl_map[word] += 1

    for word in total:
        avl_map.contains(word)
    end = time.time() - start
示例#16
0
 def test_create_empty_AVLTree(self):
     a = AVLTree()
     self.assertEqual(str(a), 'AVL{}')
示例#17
0
 def test_init(self):
     tree = AVLTree()
     assert tree.root is None
     assert tree.size == 0
     assert tree.is_empty() is True
示例#18
0
 def test_items_level_order_with_7_numbers(self):
     # Create a complete binary search tree of 7 items in level-order
     items = [4, 2, 6, 1, 3, 5, 7]
     tree = AVLTree(items)
     # Ensure the level-order traversal of tree items is ordered correctly
     assert tree.items_level_order() == [4, 2, 6, 1, 3, 5, 7]
示例#19
0
 def test_items_level_order_with_3_strings(self):
     # Create a complete binary search tree of 3 strings in level-order
     items = ['B', 'A', 'C']
     tree = AVLTree(items)
     # Ensure the level-order traversal of tree items is ordered correctly
     assert tree.items_level_order() == ['B', 'A', 'C']
示例#20
0
    def test_setitem(self):
        # CASE 1: into empty tree
        a = AVLTree()
        a[10] = 10
        self.assertEqual(a.verbose_string(), 'AVL{10:10:0, }')

        # CASE 2: Root rotation - left
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[15] = 15
        a[13] = 13
        a[20] = 20
        self.assertEqual(a.verbose_string(), 'AVL{5:5:0, 10:10:-1, 13:13:0, 15:15:0, 20:20:0, }')
        a[25] = 25
        self.assertEqual(a.verbose_string(), 'AVL{5:5:0, 10:10:0, 13:13:0, 15:15:0, 20:20:-1, 25:25:0, }')
        
        # CASE 3: Root rotation - right
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[15] = 15
        a[3] = 3
        a[8] = 8
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:1, 15:15:0, }')
        a[2] = 2
        self.assertEqual(a.verbose_string(), 'AVL{2:2:0, 3:3:1, 5:5:0, 8:8:0, 10:10:0, 15:15:0, }')

        # CASE 4: Root rotation - right left
        a = AVLTree()
        a[10] = 10
        a[15] = 15
        self.assertEqual(a.verbose_string(), 'AVL{10:10:-1, 15:15:0, }')
        a[13] = 13
        self.assertEqual(a.verbose_string(), 'AVL{10:10:0, 13:13:0, 15:15:0, }')

        # CASE 5: Root rotation - left right
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        self.assertEqual(a.verbose_string(), 'AVL{5:5:0, 10:10:1, }')
        a[8] = 8
        self.assertEqual(a.verbose_string(), 'AVL{5:5:0, 8:8:0, 10:10:0, }')

        # CASE 6: Non-Root rotation - left
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[3] = 3
        a[8] = 8
        a[15] = 15
        a[13] = 13
        a[20] = 20
        a[18] = 18
        a[25] = 25
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 13:13:0, 15:15:-1, 18:18:0, 20:20:0, 25:25:0, }')
        a[30] = 30
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 13:13:0, 15:15:0, 18:18:0, 20:20:0, 25:25:-1, 30:30:0, }')

        # CASE 7: Non-Root rotation - right
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[3] = 3
        a[8] = 8
        a[15] = 15
        a[13] = 13
        a[18] = 18
        a[12] = 12
        a[14] = 14
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 12:12:0, 13:13:0, 14:14:0, 15:15:1, 18:18:0, }')
        a[11] = 11
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 11:11:0, 12:12:1, 13:13:0, 14:14:0, 15:15:0, 18:18:0, }')
        
        # CASE 8: Non-Root rotation - right left
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[3] = 3
        a[8] = 8
        a[15] = 15
        a[13] = 13
        a[20] = 20
        a[18] = 18
        a[25] = 25
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 13:13:0, 15:15:-1, 18:18:0, 20:20:0, 25:25:0, }')
        a[17] = 17
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 13:13:0, 15:15:0, 17:17:0, 18:18:0, 20:20:-1, 25:25:0, }')
        
        # CASE 9: Non-Root rotation - left right
        a = AVLTree()
        a[10] = 10
        a[5] = 5
        a[3] = 3
        a[8] = 8
        a[16] = 16
        a[13] = 13
        a[18] = 18
        a[12] = 12
        a[14] = 14
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 12:12:0, 13:13:0, 14:14:0, 16:16:1, 18:18:0, }')
        a[15] = 15
        self.assertEqual(a.verbose_string(), 'AVL{3:3:0, 5:5:0, 8:8:0, 10:10:-1, 12:12:0, 13:13:1, 14:14:0, 15:15:0, 16:16:0, 18:18:0, }')
示例#21
0
from avltree import AVLTree


def get_r_parent(btn):  # right parent, i.e. cur node should be a left child
    while btn.parent and btn.parent.r == btn:
        btn = btn.parent
    return btn.parent


def find_next(btn):
    if not btn:
        return None
    if btn.r:
        next = btn.r
        while next.l:
            next = next.l
    else:
        next = get_r_parent(btn)
    return next


if __name__ == '__main__':
    t = AVLTree([1, 2, 3, 4, 5, 6, 7])
    n = t.root
    while n.l:
        n = n.l
    while n:
        print(n.key, end=',')
        n = find_next(n)
示例#22
0
from avltree import AVLTree
#from binarytree import BinaryTree
tree = AVLTree()
#tree = BinaryTree()

tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
tree.insert(5)
tree.insert(6)
tree.insert(7)
tree.insert(8)

tree.preorder()
#tree.postorder()
示例#23
0
文件: test1.py 项目: LJ-hust/HS
from avltree import AVLTree
from draw import plot_tree
import pickle
import time
from Heap import Heap

if __name__ == '__main__':
    tr = AVLTree().load_tree()
    plot_tree(tr)