Exemplo n.º 1
0
def create_unbalanced_tree():
    node_0 = Node(0)
    node_1 = Node(1)
    node_2 = Node(2)
    node_4 = Node(4)
    node_5 = Node(5)

    node_1.set_left_child(node_0)
    node_1.set_right_child(node_2)
    node_0.set_parent(node_1)
    node_2.set_parent(node_1)

    node_2.set_right_child(node_4)
    node_4.set_parent(node_2)

    node_4.set_right_child(node_5)
    node_5.set_parent(node_4)

    node_1._set_height(3)
    node_0._set_height(0)
    node_2._set_height(2)
    node_4._set_height(1)
    node_5._set_height(0)

    return node_1
Exemplo n.º 2
0
    def test_update_heights(self):
        node_5 = Node(5)
        node_0 = Node(0)
        node_12 = Node(12)

        tree = AVL(node_5)
        tree._set_root(node_5)
        node_5.set_left_child(node_0)
        node_5.set_right_child(node_12)
        node_0.set_parent(node_5)
        node_12.set_parent(node_5)

        node_5._set_height(1)
        node_0._set_height(0)
        node_12._set_height(0)

        node_6 = Node(6)
        node_12.set_left_child(node_6)
        node_6.set_parent(node_12)

        tree._update_heights(node_6)

        expect(node_5.get_height()).to.be.equal(2)
        expect(node_0.get_height()).to.be.equal(0)
        expect(node_12.get_height()).to.be.equal(1)
        expect(node_6.get_height()).to.be.equal(0)
Exemplo n.º 3
0
def create_tree_for_testing_predecessor():
    node_90 = Node(90)
    node_50 = Node(50)
    node_150 = Node(150)
    node_160 = Node(160)
    node_140 = Node(140)
    node_144 = Node(144)
    node_147 = Node(147)

    node_90.set_right_child(node_150)
    node_90.set_left_child(node_50)
    node_150.set_parent(node_90)
    node_50.set_parent(node_90)

    node_150.set_right_child(node_160)
    node_150.set_left_child(node_140)
    node_160.set_parent(node_150)
    node_140.set_parent(node_150)

    node_140.set_right_child(node_144)
    node_144.set_parent(node_140)

    node_144.set_right_child(node_147)
    node_147.set_parent(node_144)

    return node_90
Exemplo n.º 4
0
def create_unbalanced_tree_with_zig_zag():
    node_0 = Node(0)
    node_1 = Node(1)
    node_2 = Node(2)
    node_3 = Node(3)
    node_4 = Node(4)

    node_1.set_left_child(node_0)
    node_1.set_right_child(node_2)
    node_0.set_parent(node_1)
    node_2.set_parent(node_1)

    node_2.set_right_child(node_4)
    node_4.set_parent(node_2)

    node_4.set_left_child(node_3)
    node_3.set_parent(node_4)

    node_1._set_height(3)
    node_0._set_height(0)
    node_2._set_height(2)
    node_4._set_height(1)
    node_3._set_height(0)

    return (node_1, node_3)
Exemplo n.º 5
0
def create_unbalanced_tree_with_equal_weight_on_second_level():
    node_5 = Node(5)
    node_4 = Node(4)
    node_2 = Node(2)
    node_3 = Node(3)

    node_5.set_left_child(node_4)
    node_4.set_parent(node_5)

    node_4.set_left_child(node_2)
    node_4.set_right_child(node_3)
    node_2.set_parent(node_4)
    node_3.set_parent(node_4)

    node_2._set_height(0)
    node_3._set_height(0)
    node_4._set_height(1)
    node_5._set_height(2)

    node_2.set_node_count(1)
    node_3.set_node_count(1)
    node_4.set_node_count(3)
    node_5.set_node_count(4)

    return node_5
Exemplo n.º 6
0
def create_tree_for_testing_successor():
    node_40 = Node(40)
    node_50 = Node(50)
    node_55 = Node(55)
    node_65 = Node(65)
    node_70 = Node(70)
    node_90 = Node(90)
    node_105 = Node(105)

    node_90.set_right_child(node_105)
    node_90.set_left_child(node_50)
    node_105.set_parent(node_90)
    node_50.set_parent(node_90)

    node_50.set_right_child(node_70)
    node_50.set_left_child(node_40)
    node_70.set_parent(node_50)
    node_40.set_parent(node_50)

    node_70.set_left_child(node_65)
    node_65.set_parent(node_70)

    node_65.set_left_child(node_55)
    node_55.set_parent(node_65)

    return node_90
Exemplo n.º 7
0
def create_balanced_tree():
    node_0 = Node(0)
    node_1 = Node(1)
    node_2 = Node(2)

    node_1.set_left_child(node_0)
    node_1.set_right_child(node_2)
    node_0.set_parent(node_1)
    node_2.set_parent(node_1)

    node_1._set_height(1)
    node_0._set_height(0)
    node_2._set_height(0)

    return node_1
Exemplo n.º 8
0
def create_zig_zag_tree_left_right():
    node_12 = Node(12)
    node_6 = Node(6)
    node_8 = Node(8)

    node_12.set_left_child(node_6)
    node_6.set_parent(node_12)

    node_6.set_right_child(node_8)
    node_8.set_parent(node_6)

    node_12._set_height(2)
    node_6._set_height(1)
    node_8._set_height(0)

    return node_12
Exemplo n.º 9
0
def create_not_zig_zag_tree_left():
    node_12 = Node(12)
    node_11 = Node(11)
    node_10 = Node(10)

    node_12.set_left_child(node_11)
    node_11.set_parent(node_12)

    node_11.set_left_child(node_10)
    node_10.set_parent(node_11)

    node_12._set_height(2)
    node_11._set_height(1)
    node_10._set_height(0)

    return node_12
Exemplo n.º 10
0
def create_zig_zag_tree_right_left():
    node_12 = Node(12)
    node_14 = Node(14)
    node_13 = Node(13)

    node_12.set_right_child(node_14)
    node_14.set_parent(node_12)

    node_14.set_left_child(node_13)
    node_13.set_parent(node_14)

    node_12._set_height(2)
    node_14._set_height(1)
    node_13._set_height(0)

    return node_12
Exemplo n.º 11
0
def create_valid_avl_tree():
    node_10 = Node(10)
    node_minus_3 = Node(-3)
    node_minus_20 = Node(-20)
    node_5 = Node(5)
    node_3 = Node(3)
    node_15 = Node(15)
    node_20 = Node(20)
    node_12 = Node(12)
    node_13 = Node(13)

    node_10.set_left_child(node_minus_3)
    node_10.set_right_child(node_15)
    node_minus_3.set_parent(node_10)
    node_15.set_parent(node_10)

    node_minus_3.set_right_child(node_5)
    node_minus_3.set_left_child(node_minus_20)
    node_5.set_parent(node_minus_3)
    node_minus_20.set_parent(node_minus_3)

    node_5.set_left_child(node_3)
    node_3.set_parent(node_5)

    node_15.set_left_child(node_12)
    node_15.set_right_child(node_20)
    node_12.set_parent(node_15)
    node_20.set_parent(node_15)

    node_12.set_right_child(node_13)
    node_13.set_parent(node_12)

    node_10._set_height(3)
    node_minus_3._set_height(2)
    node_minus_20._set_height(0)
    node_5._set_height(1)
    node_3._set_height(0)
    node_15._set_height(2)
    node_20._set_height(0)
    node_12._set_height(1)
    node_13._set_height(0)

    node_10.set_node_count(9)
    node_minus_3.set_node_count(4)
    node_minus_20.set_node_count(1)
    node_5.set_node_count(2)
    node_3.set_node_count(1)
    node_15.set_node_count(4)
    node_20.set_node_count(1)
    node_12.set_node_count(2)
    node_13.set_node_count(1)

    return node_10
Exemplo n.º 12
0
    def test_rotate_left_subtree_is_left_child_from_root(self):
        A = create_left_rotable_tree()

        root = Node(10, name='root')
        root.set_left_child(A)
        A.set_parent(root)

        rotable_to_left_tree = AVL(root)
        rotable_to_left_tree._left_rotate(
            rotable_to_left_tree.get_root().get_left_child())

        root = rotable_to_left_tree.get_root()
        B = root.get_left_child()
        a = B.get_right_child()
        A = B.get_left_child()
        b = A.get_right_child()
        c = A.get_left_child()

        expect(root.get_name()).to.be.equal('root')
        expect(B.get_name()).to.be.equal('B')
        expect(A.get_name()).to.be.equal('A')
        expect(c.get_name()).to.be.equal('c')
        expect(a.get_name()).to.be.equal('a')
        expect(b.get_name()).to.be.equal('b')

        expect(root.get_height()).to.be.equal(3)
        expect(B.get_height()).to.be.equal(2)
        expect(A.get_height()).to.be.equal(1)
        expect(a.get_height()).to.be.equal(0)
        expect(b.get_height()).to.be.equal(0)
        expect(c.get_height()).to.be.equal(0)

        expect(root.get_node_count()).to.be.equal(6)
        expect(B.get_node_count()).to.be.equal(5)
        expect(A.get_node_count()).to.be.equal(3)
        expect(a.get_node_count()).to.be.equal(1)
        expect(b.get_node_count()).to.be.equal(1)
        expect(c.get_node_count()).to.be.equal(1)
Exemplo n.º 13
0
def create_right_rotable_tree():
    A = Node(24, name='A')
    B = Node(18, name='B')
    a = Node(16, name='a')
    b = Node(14, name='b')
    c = Node(17, name='c')

    A.set_right_child(c)
    c.set_parent(A)
    A.set_left_child(B)
    B.set_parent(A)
    B.set_right_child(b)
    B.set_left_child(a)
    a.set_parent(B)
    b.set_parent(B)

    A._set_height(2)
    B._set_height(1)
    a._set_height(0)
    b._set_height(0)
    c._set_height(0)

    return A