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

             N                            N
             |                            |
            (5)                          (7)
            / \                        /    \
           /   \                      /      \
          4     (7)        ->       (5)       8
               /   \                /   \
              /     \              /     \
             6       8            4       6
        """
        red_black_tree = RedBlackTree()
        red_black_tree.insert(5)
        red_black_tree.insert(4)
        red_black_tree.insert(7)
        red_black_tree.insert(6)
        red_black_tree.insert(8)
        node_to_rotate = red_black_tree.search(5)
        red_black_tree._left_rotation(node_to_rotate)
        new_left_node = red_black_tree.search(5)
        new_right_node = red_black_tree.search(7)
        assert new_right_node.parent is None
        assert new_right_node.right.val == 8
        assert new_right_node.right.parent is new_right_node
        assert new_right_node.left is new_left_node
        assert new_left_node.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.val == 6
        assert new_left_node.right.parent is new_left_node
Пример #2
0
    def test_left_rotation_with_two_nodes(self):
        """
        Left rotation
        Only two nodes
        Successfully

             N                            N
             |                            |
            (5)                         (10)
            / \                        /    \
           /   \                      /      \
          N     (10)        ->       (5)      N
               /   \                /   \
              /     \              /     \
             N       N            N       N
        """
        red_black_tree = RedBlackTree()
        red_black_tree.insert(5)
        red_black_tree.insert(10)
        node_to_rotate = red_black_tree.search(5)
        red_black_tree._left_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 None
        assert new_right_node.right is None
        assert new_right_node.left is new_left_node
        assert new_left_node.parent is new_right_node
        assert new_left_node.right is None
        assert new_left_node.left is None
Пример #3
0
    def test_left_rotation_with_one_node(self):
        """
        Left 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._left_rotation(node_to_rotate)
        new_node = red_black_tree.search(5)
        assert new_node is node_to_rotate