Beispiel #1
0
    def test_should_build_avl_tree_with_height_five(self):

        tree = Tree()

        for i in range(32):
            tree.insert(i)

        assert_that(tree.root.height, equal_to(5))
        assert_that(tree.root, equal_to(15))
Beispiel #2
0
    def test_should_find_min_and_delete_all(self):

        tree = Tree()

        tree.insert(0)
        tree.insert(1)
        tree.insert(2)

        for _ in range(3):
            tree.delete_min()

        assert_that(tree.root, equal_to(None))
Beispiel #3
0
    def test_should_remove_right_node_with_only_left_child_in_avl_tree(self):

        tree = Tree()

        for i in range(7, 3, -1):
            tree.insert(i)

        tree.delete(5)

        assert_that(tree.root.height, equal_to(1))
        assert_that(tree.root, equal_to(6))
        assert_that(tree.root.left, equal_to(4))
        assert_that(tree.root.right, equal_to(7))
Beispiel #4
0
    def test_should_build_avl_tree(self):

        tree = Tree()

        for i in range(5):
            tree.insert(i)

        assert_that(tree.root.height, equal_to(2))
        assert_that(tree.root, equal_to(1))
        assert_that(tree.root.left, equal_to(0))
        assert_that(tree.root.right, equal_to(3))
        assert_that(tree.root.right.left, equal_to(2))
        assert_that(tree.root.right.right, equal_to(4))
Beispiel #5
0
    def test_should_remove_right_node_with_only_right_child_in_avl_tree(self):

        tree = Tree()

        for i in range(6):
            tree.insert(i)

        tree.delete(4)

        assert_that(tree.root.height, equal_to(2))
        assert_that(tree.root, equal_to(3))
        assert_that(tree.root.left, equal_to(1))
        assert_that(tree.root.left.left, equal_to(0))
        assert_that(tree.root.left.right, equal_to(2))
        assert_that(tree.root.right, equal_to(5))
Beispiel #6
0
    def test_should_remove_right_leaf_in_avl_tree(self):

        tree = Tree()

        for i in range(5):
            tree.insert(i)

        tree.delete(4)

        assert_that(tree.root.height, equal_to(2))
        assert_that(tree.root, equal_to(1))
        assert_that(tree.root.left, equal_to(0))
        assert_that(tree.root.right, equal_to(3))
        assert_that(tree.root.right.left, equal_to(2))
        assert_that(tree.root.right.right, equal_to(None))
Beispiel #7
0
    def test_should_find_and_delete(self):
        tree = Tree()

        tree.insert(0)
        tree.insert(1)
        tree.insert(2)

        removed = tree.find_min().delete()

        assert_that(removed, equal_to(0))

        assert_that(tree.root.height, equal_to(1))
        assert_that(tree.root, equal_to(1))
        assert_that(tree.root.left, equal_to(None))
        assert_that(tree.root.right, equal_to(2))
Beispiel #8
0
    def test_should_remove_node_with_both_children_in_avl_tree(self):

        tree = Tree()

        for i in range(1, 8):
            tree.insert(i)

        tree.delete(6)

        assert_that(tree.root.height, equal_to(2))
        assert_that(tree.root, equal_to(4))
        assert_that(tree.root.left, equal_to(2))
        assert_that(tree.root.left.left, equal_to(1))
        assert_that(tree.root.left.right, equal_to(3))
        assert_that(tree.root.right, equal_to(7))
        assert_that(tree.root.right.left, equal_to(5))
        assert_that(tree.root.right.right, equal_to(None))
Beispiel #9
0
    def __call__(self, nodes):
        """Cria uma árvore AVL com todos os nós e suas distâncias iniciais em O(v log v)

        Percorre a lista de nós em O(v) e insere cada nó com sua distância inicial na árvore em O(log v).

        Args:
            nodes (list): lista de nós do grafo

        Returns:
            self AVL
        """
        self.__tree = Tree()
        self.__nodes = len(nodes)
        self.__distances = [None] * (max(nodes) + 1)
        for node in nodes:
            self.__distances[node] = math.inf
            self.__tree.insert(DistanceNode(node, math.inf))
        return self