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
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)
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
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)
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
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
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
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
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
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
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
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)
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