Пример #1
0
    def test_right_rotation(self):
        """
        Right rotation
        All nodes(Common case)
        Successfully

                 N                    N
                 |                    |
                (8)                  (6)
                /  \                 / \
               /    \               /   \
             (6)     9      ->     4    (8)
             / \                        / \
            /   \                      /   \
           4     7                    7     9
        """
        red_black_tree = RedBlackTree()
        red_black_tree.insert(8)
        red_black_tree.insert(9)
        red_black_tree.insert(6)
        red_black_tree.insert(4)
        red_black_tree.insert(7)
        node_to_rotate = red_black_tree.search(8)
        red_black_tree._right_rotation(node_to_rotate)
        new_left_node = red_black_tree.search(6)
        new_right_node = red_black_tree.search(8)
        assert new_right_node.parent is new_left_node
        assert new_right_node.right.val == 9
        assert new_right_node.right.parent is new_right_node
        assert new_right_node.left.val == 7
        assert new_right_node.left.parent is new_right_node
        assert new_left_node.left.val == 4
        assert new_left_node.left.parent is new_left_node
        assert new_left_node.right is new_right_node
Пример #2
0
    def test_right_rotation_with_two_nodes(self):
        """
        Right rotation
        Only two nodes
        Successfully

                 N                    N
                 |                    |
                (10)                 (5)
                /  \                 / \
               /    \               /   \
             (5)     N      ->     N    (10)
             / \                        / \
            /   \                      /   \
           N     N                    N     N
        """
        red_black_tree = RedBlackTree()
        red_black_tree.insert(10)
        red_black_tree.insert(5)
        node_to_rotate = red_black_tree.search(10)
        red_black_tree._right_rotation(node_to_rotate)
        new_left_node = red_black_tree.search(5)
        new_right_node = red_black_tree.search(10)
        assert new_right_node.parent is new_left_node
        assert new_right_node.right is None
        assert new_right_node.left is None
        assert new_left_node.parent is None
        assert new_left_node.right is new_right_node
        assert new_left_node.left is None
Пример #3
0
    def test_right_rotation_with_one_node(self):
        """
        Right rotation
        Only one node
        Successfully

             N                            N
             |                            |
            (5)           ->             (5)
            / \                        /    \
           /   \                      /      \
          (N)   N                   (N)       N
        """
        red_black_tree = RedBlackTree()
        red_black_tree.insert(5)
        node_to_rotate = red_black_tree.search(5)
        red_black_tree._right_rotation(node_to_rotate)
        new_node = red_black_tree.search(5)
        assert new_node is node_to_rotate