예제 #1
0
 def test_delete_leaf(self):
     t = rbtree.RBTree()
     for i in range(10):
         t.insert(i)
     self.assertTrue(t.delete(9))
     ct = makect()
     ct.root.right.right.right.right = rbtree.Node(None, ct.root.right.right.right)
     self.assertTrue(tree_compare(t.root, ct.root))
예제 #2
0
 def test_delete_many(self):
     t = rbtree.RBTree()
     for i in range(10):
         t.insert(i)
     for i in range(5, 10):
         self.assertTrue(t.delete(i))
     ct = makect()
     ct.root.right = rbtree.Node(4, ct.root)
     self.assertTrue(tree_compare(t.root, ct.root))
예제 #3
0
 def test_find_many(self):
     t = rbtree.RBTree()
     for i in range(0, 100, 3):
         t.insert(i)
     for i in range(1, 100, 3):
         t.insert(i)
     for i in range(2, 100, 3):
         t.insert(i)
     for i in range(10):
         self.assertTrue(t.find(i))
예제 #4
0
 def test_delete_magic2(self):
     t = rbtree.RBTree()
     random.seed(0)
     vals = [0]*100
     for i in range(len(vals)):
         k = random.randint(0, 99)
         vals[k] = 1
         t.insert(k)
     for i in range(len(vals) - 1, -1, -1):
         if vals[i] == 1:
             self.assertTrue(t.delete(i))
예제 #5
0
def makect():
    ct = rbtree.RBTree()
    ct.root = rbtree.Node(3)
    ct.root.left = rbtree.Node(1, ct.root)
    ct.root.right = rbtree.Node(5, ct.root)
    ct.root.left.left = rbtree.Node(0, ct.root.left)
    ct.root.left.right = rbtree.Node(2, ct.root.left)
    ct.root.right.left = rbtree.Node(4, ct.root.right)
    ct.root.right.right = rbtree.Node(7, ct.root.right)
    ct.root.right.right.left = rbtree.Node(6, ct.root.right.right)
    ct.root.right.right.right = rbtree.Node(8, ct.root.right.right)
    ct.root.right.right.right.right = rbtree.Node(9, ct.root.right.right.right)
    return ct
예제 #6
0
 def switch_to_rbtree(self, event):
     self.tree = rbtree.RBTree()
     for i in self.bt.content:
         self.tree.add_node(rbtree.RBTreeNode(i, "R"), snap=False)
     self.b_switch_to_bst.config(state=tkinter.NORMAL)
     self.b_switch_to_binarytree.config(state=tkinter.NORMAL)
     self.b_switch_to_rbt.config(state=tkinter.DISABLED)
     self.b_pre_order.config(state=tkinter.DISABLED)
     self.b_in_order.config(state=tkinter.DISABLED)
     self.b_post_order.config(state=tkinter.DISABLED)
     self.b_run.config(state=tkinter.NORMAL)
     self.index_displayed = -1
     self.tree.snapshot()
     self.keep_loading_img()
     pass
예제 #7
0
def switch_tree(event):
    global tree, b_switch_tree
    if type(tree) == rbtree.RBTree:
        tree = bstree.BSTree()
        b_switch_tree.config(text="New RBTree")
        b_pre_order.config(state=tkinter.NORMAL)
        b_in_order.config(state=tkinter.NORMAL)
        b_post_order.config(state=tkinter.NORMAL)
    else:
        tree = rbtree.RBTree()
        b_switch_tree.config(text="New BST")
        b_pre_order.config(state=tkinter.DISABLED)
        b_in_order.config(state=tkinter.DISABLED)
        b_post_order.config(state=tkinter.DISABLED)
    keep_loading_img()
    pass
예제 #8
0
 def test_3nodeCC(self):
     print('3 Node CC')
     tests = [(0, 1, 2), (0, 2, 1), (2, 1, 0), (2, 0, 1)]
     values = [50, 70, 100]
     for (i, j, k) in tests:
         rbt = rbtree.RBTree()
         rbt.insert(values[i])
         rbt.insert(values[j])
         rbt.insert(values[k])
         rt = rbt.root
         self.assertEqual(rt.colour, rbtree.BLACK)
         self.assertEqual(rt.key, values[1])
         self.assertEqual(rt.left.colour, rbtree.RED)
         self.assertEqual(rt.right.colour, rbtree.RED)
         self.assertEqual(rt.left.key, values[0])
         self.assertEqual(rt.right.key, values[2])
         print("Test %s passed!" % str((i, j, k)))
예제 #9
0
 def test_find_one(self):
     t = rbtree.RBTree()
     t.insert(2)
     self.assertTrue(t.find(2))
예제 #10
0
# -*- coding: utf-8 -*-
#!/usr/bin/python3
import tkinter
from PIL import Image, ImageTk
import functools
import rbtree
import bstree
import time

root = tkinter.Tk()
tree = rbtree.RBTree()
index_displayed = -1


def title_type():
    global root, tree
    if type(tree) == rbtree.RBTree:
        return 'RBTree Visualization {}/{}'
    else:
        return 'BSTree Visualization {}/{}'


def load_img():
    global root, frame1, label_img, tree, index_displayed
    if index_displayed + 1 > tree.index:
        return
    index_displayed += 1
    baseheight = 400
    img = Image.open('pics/output{}.png'.format(index_displayed))
    root.title(title_type().format(index_displayed, tree.index))
    print('printing pics/output{}.png'.format(index_displayed))
예제 #11
0
    def draw_tree(self):
        clock = pygame.time.Clock()

        value = None
        command = None
        tree_type = None
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    exit()
                if event.type == pygame.KEYUP:
                    if (256 <= event.key <= 266) or (48 <= event.key <= 57) or event.key == 46 or event.key == 45 or event.key == 269:
                        pressed = self.key_dict[event.key]
                        self.enter_value += pressed
                    elif (97 <= event.key <= 122) or (65 <= event.key <= 90) or event.key == 61:
                        pressed = str.lower(self.key_dict[event.key])
                        self.enter_value += pressed
                    elif event.key == 13 or event.key == 271:
                        value = self.type_is_numeric(self.enter_value)
                        if value:
                            self.input_values(value, command)
                        else:
                            command = self.enter_value[0:3]
                            if command == 'bin':
                                self.bt = binarytree.BinaryTree()
                                tree_type = 'bin'
                            elif command == 'avl':
                                self.bt = avltree.AVLTree()
                                tree_type = 'avl'
                            elif command == 'rbt':
                                self.bt = rbtree.RBTree()
                                tree_type = 'rbt'
                            elif command == 'cls':
                                self.points_dict = {}
                                self.lines_dict = {}
                                self.bt.nodes_dict = {}
                                self.bt = None
                                self.make_points_lines()
                            elif command == 'rm=':
                                _, value = self.enter_value.split('=')
                                num = self.type_is_numeric(value)
                                remove_key, successor = self.bt.remove(num)
                                if tree_type == 'rbt':
                                    self.make_points_lines_rbt()
                                else:
                                    self.remove(remove_key, successor)
                                    self.make_points_lines()

                                self.enter_value = ""

                        self.enter_value = ""
                    elif event.key == 27:
                        pygame.quit()
                        exit()
                    elif event.key == 8: # backspace
                        if self.enter_value:
                            x = len(self.enter_value)
                            self.enter_value = self.enter_value[0:x - 1]

            self.screen.fill(self.WHITE)

            self.draw_input()

            if tree_type == 'bin' or tree_type == 'avl':
                self.draw_nodes(value)
            elif tree_type == 'rbt':
                self.draw_nodes_rbt(value)
            elif command == 'rm=':
                if tree_type == 'bin' or tree_type == 'avl':
                    self.draw_nodes_rbt(value)
                else:
                    self.draw_nodes_rbt(value)
            elif command == 'cls':
                self.draw_nodes(None)
                self.screen.blit(self.image, (283, 200))
                pygame.draw.aaline(self.screen, self.RED, [110, 40], [424, 200], 2)
            else:
                self.screen.blit(self.image, (283, 200))
                pygame.draw.aaline(self.screen, self.RED, [110, 40], [424, 200], 2)

            clock.tick(30)

            pygame.display.update()
예제 #12
0
 def test_delete_root(self):
     t = rbtree.RBTree()
     t.insert(1)
     self.assertTrue(t.delete(1))
     self.assertEqual(t.root, None)
예제 #13
0
 def test_delete_not_exist_big(self):
     t = rbtree.RBTree()
     t.insert(1)
     self.assertFalse(t.delete(2))
예제 #14
0
 def test_delete_none(self):
     t = rbtree.RBTree()
     self.assertFalse(t.delete(2))
예제 #15
0
 def test_find_many2(self):
     t = rbtree.RBTree()
     for i in range(10, 0, -1):
         t.insert(i)
     for i in range(1, 11):
         self.assertTrue(t.find(i))
예제 #16
0
 def test_delete_many2(self):
     t = rbtree.RBTree()
     for i in range(10):
         t.insert(i)
     for i in range(0, 6):
         self.assertTrue(t.delete(i))
예제 #17
0
 def test_insert_many(self):
     t = rbtree.RBTree()
     for i in range(10):
         t.insert(i)
     ct = makect()
     self.assertTrue(tree_compare(t.root, ct.root))
예제 #18
0
 def test_find_none_big(self):
     t = rbtree.RBTree()
     t.insert(2)
     self.assertFalse(t.find(3))
예제 #19
0
 def test_delete_not_exist_small(self):
     t = rbtree.RBTree()
     t.insert(1)
     self.assertFalse(t.delete(-1))
예제 #20
0
 def test_find_none(self):
     t = rbtree.RBTree()
     self.assertFalse(t.find(2))
예제 #21
0
 def test_delete_many3(self):
     t = rbtree.RBTree()
     for i in range(10):
         t.insert(i)
     self.assertTrue(t.delete(3))
     self.assertTrue(t.delete(4))
예제 #22
0
 def test_insert_one(self):
     t = rbtree.RBTree()
     t.insert(2)
     self.assertEqual(t.root.key, 2)
예제 #23
0
 def test_creation(self):
     t = rbtree.RBTree()
     self.assertNotEqual(t, None)
예제 #24
0
 def setUp(self):
     self.rbt = rbtree.RBTree()
예제 #25
0
 def test_find_none_small(self):
     t = rbtree.RBTree()
     t.insert(2)
     self.assertFalse(t.find(1))