def test_insert_single_node(self):
     print("Running test_insert_single_node")
     h = BST()
     h.insert(5)
     self.assertEqual(h.get_root().get_key(), 5)
     self.assertEqual(str(h.get_root()), '5')
     self.check_multiline(str(h), [["5"], ["_", "_"], ["5"]])
    def test_unique_insert(self):
        print("Running test_unique_insert")
        h = BST()
        a = h.insert(5)
        b = h.insert(5)
        c = h.insert(5)
        self.assertTrue(isinstance(a, Node))
        self.assertEqual(h.get_root().get_left_child(), None)
        self.assertEqual(h.get_root().get_right_child(), None)

        self.assertEqual(b, None)
        self.assertEqual(c, None)
 def test_child_parent_link(self):
     print("Running test_child_parent_link")
     h = BST([21, 17, 11, 15, 6, 5, 8, 1, 9])
     n = h.get_root().get_left_child()
     self.assertEqual(n.get_key(), 17)
     self.assertEqual(n.get_right_child(), None)
     self.assertEqual(n.get_parent().get_key(), 21)
     self.assertEqual(n.get_left_child().get_left_child().get_key(), 6)
     self.assertEqual(
         n.get_left_child().get_left_child().get_parent().get_key(), 11)
 def test_insert_3_nodes_3(self):
     print("Running test_insert_3_nodes_ordered")
     h = BST([5, 10, 6])
     root = h.get_root()
     self.assertEqual(root.get_key(), 5)
     self.assertEqual(root.get_left_child(), None)
     self.assertEqual(root.get_right_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_left_child().get_key(), 6)
     self.check_multiline(
         str(h),
         [["5"], ["_", "10"], ["6", "_"], ["_", "_"], ["5", "6", "10"]])
 def test_delete_connections(self):
     print("Running test_delete_connections")
     h = BST([20, 10, 25, 5, 18, 13, 15])
     self.check_multiline(str(h),
                          [["20"], ["10", "25"], ["5", "18", "_", "_"],
                           ["_", "_", "13", "_"], ['_', '15'], ['_', '_'],
                           ["5", "10", "13", "15", "18", "20", "25"]])
     h.delete(10)
     self.check_multiline(str(h),
                          [["20"], ["13", "25"], ["5", "18", "_", "_"],
                           ["_", "_", "15", "_"], ['_', '_'],
                           ["5", "13", "15", "18", "20", "25"]])
     # Start checking all connections
     root = h.get_root()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 13)
     self.assertEqual(root.get_right_child().get_key(), 25)
     # Check Left = 13
     node_13 = root.get_left_child()
     self.assertEqual(node_13.get_key(), 13)
     self.assertEqual(node_13.get_parent().get_key(), 20)
     self.assertEqual(node_13.get_left_child().get_key(), 5)
     self.assertEqual(node_13.get_right_child().get_key(), 18)
     # Check Right = 25
     node_25 = root.get_right_child()
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     # Check Left Left = 5
     node_5 = node_13.get_left_child()
     self.assertEqual(node_5.get_key(), 5)
     self.assertEqual(node_5.get_parent().get_key(), 13)
     self.assertEqual(node_5.get_left_child(), None)
     self.assertEqual(node_5.get_right_child(), None)
     # Check Left Right = 18
     node_18 = node_13.get_right_child()
     self.assertEqual(node_18.get_key(), 18)
     self.assertEqual(node_18.get_parent().get_key(), 13)
     self.assertEqual(node_18.get_left_child().get_key(), 15)
     self.assertEqual(node_18.get_right_child(), None)
     # Check Left Right Left = 15
     node_15 = node_18.get_left_child()
     self.assertEqual(node_15.get_key(), 15)
     self.assertEqual(node_15.get_parent().get_key(), 18)
     self.assertEqual(node_15.get_left_child(), None)
     self.assertEqual(node_15.get_right_child(), None)
Ejemplo n.º 6
0
    def delete(self, key):
        """Remove the Node object containing the key if the key exists in
           the AVL using the BST delete operation. In addition, it ensures that
           the AVL tree is still balanced after this operation is performed.
           
           Return the node that actually got removed from the AVL, which might
           be successor of the removed key."""

        # Delete a key from the tree
        BST.delete(self, key)
        node = BST.search(self, key)
        root = BST.get_root(self)

        # Update balance and fix balance (rotate tree) if necessary
        self.update_balance(node)
        self.fix_balance(root)
Ejemplo n.º 7
0
    def insert(self, key, value=None):
        """Create a new node for this key and value, and insert it into the AVL
           using the BST insert operation. In addition, it ensures that the AVL
           tree is still balanced after this operation is performed.
           
           Return the new inserted node, or None if the key and value could not
           be inserted."""

        # Insert a key to the tree
        BST.insert(self, key, value)
        node = BST.search(self, key)
        root = BST.get_root(self)

        # Update balance and fix balance (rotate tree) if necessary
        self.update_balance(node)
        self.fix_balance(node)
 def test_insert_connections(self):
     print("Running test_delete_case_3")
     h = BST()
     # Start checking all connections
     h.insert(20)
     root = h.get_root()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child(), None)
     self.assertEqual(root.get_right_child(), None)
     h.insert(25)
     node_25 = root.get_right_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child(), None)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     h.insert(10)
     node_10 = root.get_left_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     self.assertEqual(node_10.get_key(), 10)
     self.assertEqual(node_10.get_parent().get_key(), 20)
     self.assertEqual(node_10.get_left_child(), None)
     self.assertEqual(node_10.get_right_child(), None)
     h.insert(18)
     node_18 = node_10.get_right_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     self.assertEqual(node_10.get_key(), 10)
     self.assertEqual(node_10.get_parent().get_key(), 20)
     self.assertEqual(node_10.get_left_child(), None)
     self.assertEqual(node_10.get_right_child().get_key(), 18)
     self.assertEqual(node_18.get_key(), 18)
     self.assertEqual(node_18.get_parent().get_key(), 10)
     self.assertEqual(node_18.get_left_child(), None)
     self.assertEqual(node_18.get_right_child(), None)
     h.insert(13)
     node_13 = node_18.get_left_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     self.assertEqual(node_10.get_key(), 10)
     self.assertEqual(node_10.get_parent().get_key(), 20)
     self.assertEqual(node_10.get_left_child(), None)
     self.assertEqual(node_10.get_right_child().get_key(), 18)
     self.assertEqual(node_18.get_key(), 18)
     self.assertEqual(node_18.get_parent().get_key(), 10)
     self.assertEqual(node_18.get_left_child().get_key(), 13)
     self.assertEqual(node_18.get_right_child(), None)
     self.assertEqual(node_13.get_key(), 13)
     self.assertEqual(node_13.get_parent().get_key(), 18)
     self.assertEqual(node_13.get_left_child(), None)
     self.assertEqual(node_13.get_right_child(), None)
     h.insert(5)
     node_5 = node_10.get_left_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     self.assertEqual(node_10.get_key(), 10)
     self.assertEqual(node_10.get_parent().get_key(), 20)
     self.assertEqual(node_10.get_left_child().get_key(), 5)
     self.assertEqual(node_10.get_right_child().get_key(), 18)
     self.assertEqual(node_18.get_key(), 18)
     self.assertEqual(node_18.get_parent().get_key(), 10)
     self.assertEqual(node_18.get_left_child().get_key(), 13)
     self.assertEqual(node_18.get_right_child(), None)
     self.assertEqual(node_13.get_key(), 13)
     self.assertEqual(node_13.get_parent().get_key(), 18)
     self.assertEqual(node_13.get_left_child(), None)
     self.assertEqual(node_13.get_right_child(), None)
     self.assertEqual(node_5.get_key(), 5)
     self.assertEqual(node_5.get_parent().get_key(), 10)
     self.assertEqual(node_5.get_left_child(), None)
     self.assertEqual(node_5.get_right_child(), None)
     h.insert(15)
     node_15 = node_13.get_right_child()
     self.assertEqual(root.get_key(), 20)
     self.assertEqual(root.get_parent(), None)
     self.assertEqual(root.get_left_child().get_key(), 10)
     self.assertEqual(root.get_right_child().get_key(), 25)
     self.assertEqual(node_25.get_key(), 25)
     self.assertEqual(node_25.get_parent().get_key(), 20)
     self.assertEqual(node_25.get_left_child(), None)
     self.assertEqual(node_25.get_right_child(), None)
     self.assertEqual(node_10.get_key(), 10)
     self.assertEqual(node_10.get_parent().get_key(), 20)
     self.assertEqual(node_10.get_left_child().get_key(), 5)
     self.assertEqual(node_10.get_right_child().get_key(), 18)
     self.assertEqual(node_18.get_key(), 18)
     self.assertEqual(node_18.get_parent().get_key(), 10)
     self.assertEqual(node_18.get_left_child().get_key(), 13)
     self.assertEqual(node_18.get_right_child(), None)
     self.assertEqual(node_13.get_key(), 13)
     self.assertEqual(node_13.get_parent().get_key(), 18)
     self.assertEqual(node_13.get_left_child(), None)
     self.assertEqual(node_13.get_right_child().get_key(), 15)
     self.assertEqual(node_5.get_key(), 5)
     self.assertEqual(node_5.get_parent().get_key(), 10)
     self.assertEqual(node_5.get_left_child(), None)
     self.assertEqual(node_5.get_right_child(), None)
     self.assertEqual(node_15.get_key(), 15)
     self.assertEqual(node_15.get_parent().get_key(), 13)
     self.assertEqual(node_15.get_left_child(), None)
     self.assertEqual(node_15.get_right_child(), None)
     self.check_multiline(str(h),
                          [["20"], ["10", "25"], ["5", "18", "_", "_"],
                           ["_", "_", "13", "_"], ['_', '15'], ['_', '_'],
                           ["5", "10", "13", "15", "18", "20", "25"]])
 def test_height_insert_delete_2(self):
     print("Running test_height_insert_delete_2")
     h = BST()
     h.insert(5)
     self.assertEqual(h.get_root().get_height(), 0)
     h.insert(2)
     self.assertEqual(h.get_root().get_height(), 1)
     self.assertEqual(h.get_root().get_left_child().get_height(), 0)
     h.insert(8)
     self.assertEqual(h.get_root().get_height(), 1)
     self.assertEqual(h.get_root().get_left_child().get_height(), 0)
     self.assertEqual(h.get_root().get_right_child().get_height(), 0)
     h.insert(1)
     self.assertEqual(h.get_root().get_height(), 2)
     self.assertEqual(h.get_root().get_right_child().get_height(), 0)
     self.assertEqual(h.get_root().get_left_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_left_child().get_left_child().get_height(), 0)
     h.insert(3)
     self.assertEqual(h.get_root().get_height(), 2)
     self.assertEqual(h.get_root().get_right_child().get_height(), 0)
     self.assertEqual(h.get_root().get_left_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_left_child().get_left_child().get_height(), 0)
     self.assertEqual(
         h.get_root().get_left_child().get_right_child().get_height(), 0)
     h.insert(9)
     self.assertEqual(h.get_root().get_height(), 2)
     self.assertEqual(h.get_root().get_right_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_right_child().get_right_child().get_height(), 0)
     self.assertEqual(h.get_root().get_left_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_left_child().get_left_child().get_height(), 0)
     self.assertEqual(
         h.get_root().get_left_child().get_right_child().get_height(), 0)
     h.insert(10)
     self.assertEqual(h.get_root().get_height(), 3)
     self.assertEqual(h.get_root().get_right_child().get_height(), 2)
     self.assertEqual(
         h.get_root().get_right_child().get_right_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_right_child().get_right_child().get_right_child().
         get_height(), 0)
     self.assertEqual(h.get_root().get_left_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_left_child().get_left_child().get_height(), 0)
     self.assertEqual(
         h.get_root().get_left_child().get_right_child().get_height(), 0)
     self.check_multiline(str(h),
                          [["5"], ["2", "8"], ["1", "3", "_", "9"],
                           ["_", "_", "_", "_", "_", "10"], ["_", "_"],
                           ["1", "2", "3", "5", "8", "9", "10"]])
     h.delete(1)
     h.delete(3)
     self.assertEqual(h.get_root().get_height(), 3)
     self.assertEqual(h.get_root().get_right_child().get_height(), 2)
     self.assertEqual(
         h.get_root().get_right_child().get_right_child().get_height(), 1)
     self.assertEqual(
         h.get_root().get_right_child().get_right_child().get_right_child().
         get_height(), 0)
     self.assertEqual(h.get_root().get_left_child().get_height(), 0)
     self.check_multiline(
         str(h), [["5"], ["2", "8"], ["_", "_", "_", "9"], ["_", "10"],
                  ["_", "_"], ["2", "5", "8", "9", "10"]])