def testRemoveValueWithTwoChildren(self): tree = BST() tree.add_value(300) tree.add_value(250) tree.add_value(500) tree.add_value(225) tree.add_value(275) otherTree = BST() otherTree.add_value(275) otherTree.add_value(250) otherTree.add_value(500) otherTree.add_value(225) # tree.printPreorder(root=tree.root) # print(tree.__len__()) ## should print 13 # tree.remove_value(300) # print() # tree.printPreorder(root=tree.root) # print(tree.__len__()), ## should print 12 self.assertEqual(tree, otherTree) # treeLength = self.assertEqual(tree.__len__(), otherTree.__len__())
def test_remove_root_nochildren(self): tree = BST() tree.add_value(100) #print("tree length:",len(tree)) tree.remove_value(100) #print("tree length after:",len(tree)) self.assertEqual(0, len(tree))
def test_duplicate_insert(self): tree = BST() fill_int_tree(tree) self.assertEqual(len(tree), 5) tree.add_value(80) self.assertEqual(len(tree), 6) tree.add_value(80) self.assertEqual(len(tree), 7)
def returnBST(filepath) -> BST: newbst = BST(key=lambda x: x.amount) with open(filepath) as inputfile: for i in inputfile: name, value = i.split(sep=":") newdonor = Donor(name, value) newbst.add_value(newdonor) return newbst
def test_max(self): tree = BST() tree.add_value(100) self.assertEqual(tree.get_max_node().value, 100) tree.add_value(80) self.assertEqual(tree.get_max_node().value, 100) tree.add_value(200) self.assertEqual(tree.get_max_node().value, 200) tree.add_value(0) self.assertEqual(tree.get_max_node().value, 200) tree.add_value(-3) self.assertEqual(tree.get_max_node().value, 200)
def test_get_node_error(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(90) tree.add_value(200) tree.add_value(70) self.assertRaises(MissingValueError, tree.get_node, 50)
def test_get_node(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(90) tree.add_value(200) tree.add_value(70) self.assertEqual(BSTNode(70), tree.get_node(70))
def test_remove_internal_node_with_two_children(self): tree = BST() fill_int_tree(tree) tree.add_value(50) tree.add_value(95) tree.remove_value(80) root = BSTNode(100) root.left = BSTNode(90) root.right = BSTNode(200) root.left.left = BSTNode(70) root.left.right = BSTNode(95) root.left.left.left = BSTNode(50) cmp_tree = BST(root) self.assertEqual(tree, cmp_tree)
def test_get_max_node2(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(90) tree.add_value(200) tree.add_value(70) node_to_remove = tree.get_node(80) self.assertEqual(BSTNode(90), tree.get_max_node(node_to_remove))
def testGetMinNode(self): tree = BST() tree.add_value(50) tree.add_value(25) tree.add_value(100) tree.add_value(10) tree.add_value(150) minNode = tree.get_min_node() self.assertEqual(minNode.value, 10)
def testRemoveValueInnerNodeWithTwoChildren(self): # removing an inner node with two children- node with a value of 250 tree = BST() tree.add_value(300) tree.add_value(250) tree.add_value(500) tree.add_value(225) tree.add_value(275) otherTree = BST() otherTree.add_value(300) otherTree.add_value(500) otherTree.add_value(225) otherTree.add_value(275) tree.remove_value(250) self.assertEqual(tree, otherTree)
def testHeight(self): tree = BST() tree.add_value(50) tree.add_value(25) tree.add_value(100) tree.add_value(10) tree.add_value(150) heightOfTree = tree.height self.assertEqual(heightOfTree, 2)
def test_remove_both_children(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(200) tree.add_value(90) tree.add_value(70) tree.add_value(150) tree.remove_value(80) results = [] values = [] tree.inorder(results) for x in results: value = x.value values.append(value) self.assertEqual(values, [70, 90, 100, 150, 200])
def test_remove_value_len(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(90) tree.add_value(200) tree.add_value(70) #print(len(tree)) tree.remove_value(80) #print(len(tree)) #tree.print_tree() self.assertEqual(4, len(tree))
def test_create_tree(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(200) tree.add_value(90) tree.add_value(70) root = BSTNode(100) root.left = BSTNode(80) root.right = BSTNode(200) root.left.left = BSTNode(70) root.left.right = BSTNode(90) cmp_tree = BST(root) self.assertEqual(tree, cmp_tree) # but we don't pass this
def test_tree_not_eq(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(200) tree.add_value(90) tree.add_value(70) root = BSTNode(100) root.left = BSTNode(80) root.right = BSTNode(200) root.left.left = BSTNode(70) root.left.right = BSTNode(92) cmp_tree = BST(root) cmp_tree._num_nodes = 5 self.assertNotEqual(tree, cmp_tree)
def test_delete_4(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(200) tree.add_value(300) tree.add_value(150) tree.remove_value(200) root = BSTNode(100) root.left = BSTNode(80) root.right = BSTNode(150) root.right.right = BSTNode(300) cmp_tree = BST(root) self.assertEqual(tree, cmp_tree)
def test_create_tree(self): tree = BST() tree.add_value(100) tree.add_value(80) tree.add_value(200) tree.add_value(90) tree.add_value(70) root = BSTNode(100) root.left = BSTNode(80) root.right = BSTNode(200) root.left.left = BSTNode(70) root.left.right = BSTNode(90) cmp_tree = BST(root) self.assertEqual(tree, cmp_tree) self.assertEqual(tree.height, 2) self.assertEqual(len(tree), 5)
def testRemoveValueWithNoChildrenXD(self): tree = BST() tree.add_value(250) tree.add_value(225) tree.add_value(275) otherTree = BST() otherTree.add_value(250) otherTree.add_value(275) # remove a left leaf tree.remove_value(225) self.assertEqual(tree, otherTree)
def test_get_node(self): tree = BST() tree.add_value(100) self.assertEqual(tree.get_node(100).value, 100) tree.add_value(80) self.assertEqual(tree.get_node(80).value, 80) tree.add_value(200) self.assertEqual(tree.get_node(200).value, 200) tree.add_value(60) self.assertEqual(tree.get_node(60).value, 60) tree.add_value(90) self.assertEqual(tree.get_node(90).value, 90) tree.add_value(0) self.assertEqual(tree.get_node(0).value, 0) tree.add_value(-3) self.assertEqual(tree.get_node(-3).value, -3) tree.add_value(1) self.assertEqual(tree.get_node(1).value, 1)
def testRemoveValueWithOneChildRightSide(self): tree = BST() tree.add_value(100) tree.add_value(50) tree.add_value(125) tree.add_value(200) otherTree = BST() otherTree.add_value(100) otherTree.add_value(50) otherTree.add_value(200) # remove value 125 from tree and compare to otherTree tree.remove_value(125) self.assertEqual(tree, otherTree)
def testGetNode(self): tree = BST() tree.add_value(200) tree.add_value(100) tree.add_value(300) tree.add_value(50) tree.add_value(110) tree.add_value(250) tree.add_value(500) tree.add_value(25) tree.add_value(75) tree.add_value(105) tree.add_value(150) tree.add_value(225) tree.add_value(275) retrievedNode = tree.get_node(105) self.assertEqual(retrievedNode.value, 105)
def testRemoveValueWithNoChildren(self): tree = BST() tree.add_value(100) tree.add_value(50) tree.add_value(125) tree.add_value(200) otherTree = BST() otherTree.add_value(100) otherTree.add_value(50) otherTree.add_value(125) # remove a leaf node (a node with no children) tree.remove_value(200) self.assertEqual(tree, otherTree)
def test_height(self): tree = BST() tree.add_value(100) self.assertEqual(tree.height(), 0) tree.add_value(80) self.assertEqual(tree.height(), 1) tree.add_value(200) self.assertEqual(tree.height(), 1) tree.add_value(60) self.assertEqual(tree.height(), 2) tree.add_value(90) self.assertEqual(tree.height(), 2) tree.add_value(0) self.assertEqual(tree.height(), 3) tree.add_value(-3) self.assertEqual(tree.height(), 4) tree.add_value(1) self.assertEqual(tree.height(), 4)
def test_get_node_not_equal(self): tree = BST() tree.add_value(100) with self.assertRaises(MissingValueError): tree.get_node(90)
def testRemoveValueWeirdTree(self): tree = BST() tree.add_value(100) tree.add_value(50) tree.add_value(150) tree.add_value(125) tree.add_value(120) tree.add_value(125) tree.add_value(127) tree.add_value(126) otherTree = BST() otherTree.add_value(100) otherTree.add_value(50) otherTree.add_value(150) otherTree.add_value(125) otherTree.add_value(120) otherTree.add_value(125) otherTree.add_value(126) # remove 127 from tree tree.remove_value(127) self.assertEqual(tree, otherTree)
def test_add_value(self): tree = BST() tree.add_value(100) self.assertEqual(tree.get_node(100).value, 100) self.assertEqual(len(tree), 1)
def test_min_test(self): tree = BST() tree.add_value(100) self.assertEqual(tree.get_min_node().value, 100) tree.add_value(80) self.assertEqual(tree.get_min_node().value, 80) tree.add_value(200) self.assertEqual(tree.get_min_node().value, 80) tree.add_value(60) self.assertEqual(tree.get_min_node().value, 60) tree.add_value(90) self.assertEqual(tree.get_min_node().value, 60) tree.add_value(0) self.assertEqual(tree.get_min_node().value, 0) tree.add_value(-1) self.assertEqual(tree.get_min_node().value, -1) tree.add_value(-3) self.assertEqual(tree.get_min_node().value, -3)
def test_length(self): tree = BST() tree.add_value(100) self.assertEqual(len(tree), 1) tree.add_value(80) self.assertEqual(len(tree), 2) tree.add_value(200) self.assertEqual(len(tree), 3) tree.add_value(60) self.assertEqual(len(tree), 4) tree.add_value(90) self.assertEqual(len(tree), 5) tree.add_value(0) self.assertEqual(len(tree), 6) tree.add_value(-3) self.assertEqual(len(tree), 7) tree.add_value(-2) self.assertEqual(len(tree), 8)
from Trees.src.donor_prog.donor import Donor from Trees.src.errors import MissingValueError, EmptyTreeError if __name__ == '__main__': donor_file_path = sys.argv[1] command = sys.argv[2] donor_tree = BST(None, lambda x: x.amount) with open(donor_file_path) as cfg: for line_num, line in enumerate(cfg): split_line = line.split(" : ") donor_name, donor_amount = split_line[0].strip(), int( split_line[1].strip()) #create donor object and add it to the tree donor_info = Donor(donor_name, donor_amount) donor_tree.add_value(donor_info) donor_node = None if command == 'all': donor_node = donor_tree.get_min_node() while donor_node is not None: print(str(donor_node.value)) donor_node = donor_tree.successor(donor_node) elif command == 'cheap': donor_node = donor_tree.get_min_node() elif command == 'rich': donor_node = donor_tree.get_max_node() elif command == 'who': amount_arg = sys.argv[3] if amount_arg[0] == '+': # who +amount: Prints the first donor that donated at least amount if any amount = int(amount_arg[1:])