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))
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))
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))
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))
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
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
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
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)))
def test_find_one(self): t = rbtree.RBTree() t.insert(2) self.assertTrue(t.find(2))
# -*- 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))
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()
def test_delete_root(self): t = rbtree.RBTree() t.insert(1) self.assertTrue(t.delete(1)) self.assertEqual(t.root, None)
def test_delete_not_exist_big(self): t = rbtree.RBTree() t.insert(1) self.assertFalse(t.delete(2))
def test_delete_none(self): t = rbtree.RBTree() self.assertFalse(t.delete(2))
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))
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))
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))
def test_find_none_big(self): t = rbtree.RBTree() t.insert(2) self.assertFalse(t.find(3))
def test_delete_not_exist_small(self): t = rbtree.RBTree() t.insert(1) self.assertFalse(t.delete(-1))
def test_find_none(self): t = rbtree.RBTree() self.assertFalse(t.find(2))
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))
def test_insert_one(self): t = rbtree.RBTree() t.insert(2) self.assertEqual(t.root.key, 2)
def test_creation(self): t = rbtree.RBTree() self.assertNotEqual(t, None)
def setUp(self): self.rbt = rbtree.RBTree()
def test_find_none_small(self): t = rbtree.RBTree() t.insert(2) self.assertFalse(t.find(1))