Exemplo n.º 1
0
    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__())
Exemplo n.º 2
0
 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))
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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))
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
 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))
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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])
Exemplo n.º 14
0
 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))
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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)
Exemplo n.º 18
0
    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)
Exemplo n.º 19
0
    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)
Exemplo n.º 20
0
 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)
Exemplo n.º 21
0
    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)
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
 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)
Exemplo n.º 25
0
 def test_get_node_not_equal(self):
     tree = BST()
     tree.add_value(100)
     with self.assertRaises(MissingValueError):
         tree.get_node(90)
Exemplo n.º 26
0
    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)
Exemplo n.º 27
0
 def test_add_value(self):
     tree = BST()
     tree.add_value(100)
     self.assertEqual(tree.get_node(100).value, 100)
     self.assertEqual(len(tree), 1)
Exemplo n.º 28
0
 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)
Exemplo n.º 29
0
 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)
Exemplo n.º 30
0
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:])