def remove_one_child_root(): """Removing root in a tree where the root has only one child""" tree = Bst() tree.add(ROOT_DATA) tree.add(LEFT_DATA) self.assertFalse(tree.isempty()) self.assertEquals(tree.getsize(), 2) self.assertEquals(tree.root.getleft().getdata(), LEFT_DATA) val = tree.remove(ROOT_DATA) self.assertFalse(tree.isempty()) self.assertEquals(tree.getsize(), 1) self.assertEquals(val, ROOT_DATA) self.assertIsNotNone(tree.root) self.assertNotEquals(tree.root.getdata(), ROOT_DATA) self.assertEquals(tree.root, Node(LEFT_DATA))
def test_add(self): tree = Bst() tree.add(ROOT_DATA) self.assertEquals(tree.getsize(), 1) self.assertIsNotNone(tree.root) self.assertEquals(tree.root.getheight(), 0) self.assertEquals(tree.root.getdata(), ROOT_DATA) # Add left child tree.add(LEFT_DATA) self.assertEquals(tree.getsize(), 2) self.assertIsNotNone(tree.root.getleft()) self.assertIsNone(tree.root.getright()) self.assertEquals(tree.root.getleft().getdata(), LEFT_DATA) self.assertEquals(tree.root.getheight(), 1) # Add right child tree.add(RIGHT_DATA) self.assertEquals(tree.getsize(), 3) self.assertIsNotNone(tree.root.getleft()) self.assertIsNotNone(tree.root.getright()) self.assertEquals(tree.root.getright().getdata(), RIGHT_DATA) self.assertEquals(tree.root.getheight(), 1) # Add granchildren to left child tree.add(LL_DATA) self.assertEquals(tree.getsize(), 4) self.assertIsNotNone(tree.root.getleft().getleft()) self.assertIsNone(tree.root.getleft().getright()) self.assertEquals(tree.root.getleft().getleft().getdata(), LL_DATA) self.assertEquals(tree.root.getheight(), 2) self.assertEquals(tree.root.getleft().getheight(), 1) tree.add(LR_DATA) self.assertEquals(tree.getsize(), 5) self.assertIsNotNone(tree.root.getleft().getleft()) self.assertIsNotNone(tree.root.getleft().getright()) self.assertEquals(tree.root.getleft().getright().getdata(), LR_DATA) self.assertEquals(tree.root.getheight(), 2) self.assertEquals(tree.root.getleft().getheight(), 1) # Add grandchildren to right child tree.add(RL_DATA) self.assertEquals(tree.getsize(), 6) self.assertIsNotNone(tree.root.getright().getleft()) self.assertIsNone(tree.root.getright().getright()) self.assertEquals(tree.root.getright().getleft().getdata(), RL_DATA) self.assertEquals(tree.root.getheight(), 2) self.assertEquals(tree.root.getright().getheight(), 1) tree.add(RR_DATA) self.assertEquals(tree.getsize(), 7) self.assertIsNotNone(tree.root.getright().getleft()) self.assertIsNotNone(tree.root.getright().getright()) self.assertEquals(tree.root.getright().getright().getdata(), RR_DATA) self.assertEquals(tree.root.getheight(), 2) self.assertEquals(tree.root.getright().getheight(), 1)
def test_size(self): tree = Bst() self.assertEquals(tree.size, 0) self.assertEquals(tree.size, tree.getsize()) # Set tree size to arbitrary number ARBITRARY_SIZE = 5 tree.size = ARBITRARY_SIZE self.assertEquals(tree.size, ARBITRARY_SIZE) self.assertEquals(tree.size, tree.getsize()) # Adding should increment size tree = balanced_tree() self.assertEquals(tree.getsize(), 7) FAR_RIGHT_DATA = 100 tree.add(FAR_RIGHT_DATA) self.assertEquals(tree.getsize(), 8) # Removing should decrement size tree = balanced_tree() self.assertEquals(tree.getsize(), 7) tree.remove(ROOT_DATA) self.assertEquals(tree.getsize(), 6)