Exemple #1
0
static TreeNode * insertIntoTree(AVLTree * tree, TreeNode * node, void * data, Boolean * success)
{
	if(node == NULL)
		return newTreeNode(data);

	int comparision = tree->compare(data, node->data);

	if(comparision == 0)
	{
		*success = false;
		return node;
	}

	int direction = comparision > 0 ? RIGHT : LEFT;

	if(direction == RIGHT)
	{
		node->right = insertIntoTree(tree, node->right, data, success);
	}
	else
	{
		node->left = insertIntoTree(tree, node->left, data, success);
	}

	updateHeight(node);

	node = balanceNode(node);

	return node;
}
Exemple #2
0
void test_must_not_delete_any_Parent_node(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[2] = {10,23};
	ASSERT(insertIntoTree(&tree, NULL, &data));
	ASSERT(insertIntoTree(&tree, &data, &data[1]));
	ASSERT(0 == deleteFromTree(&tree,&data[0]));
	disposeTree(&tree);
}
Exemple #3
0
void test_must_delete_node_at_second_level(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[2] = {10,23};
	ASSERT(insertIntoTree(&tree, NULL, &data));
	ASSERT(insertIntoTree(&tree, &data, &data[1]));
	ASSERT(deleteFromTree(&tree,&data[1]));
	result = getChildren(&tree, &data);
	ASSERT(0 == result.hasNext(&result));
	disposeTree(&tree);
}
Exemple #4
0
void test_must_insert_node_at_second_level(){
	Tree tree = createTree(compareInts);
	int data[] = {5,10,15};
	Iterator result;
	insertIntoTree(&tree, NULL, &data[0]);
	insertIntoTree(&tree, &data[0], &data[1]);
	insertIntoTree(&tree, &data[0], &data[2]);
	result = getChildren(&tree, &data);
	ASSERT(15 == *(int*)result.next(&result));
	ASSERT(10 == *(int*)result.next(&result));
	disposeTree(&tree);
}
Exemple #5
0
void test_must_insert_root_node(){
	Tree tree = createTree(compareInts);
	int data = 2;
	int result = insertIntoTree(&tree, NULL, &data);
	ASSERT(SUCCESS == result);
	disposeTree(&tree);
}
Exemple #6
0
Boolean AVLTree_insert(AVLTree * tree, void * data)
{
	if(tree == NULL || data == NULL)
		return false;

	Boolean success = true;

	tree->rootNode = insertIntoTree(tree, tree->rootNode, data, &success);

	if(success)
		tree->numNodes++;

	return success;
}
Exemple #7
0
void test_must_insert_nodes_at_different_levels(){
	Tree tree = createTree(compareInts);
	Iterator it;
	int data[7] = {10,12,30,4,45,5,50};
	ASSERT(insertIntoTree(&tree, NULL, &data[0]));
	ASSERT(insertIntoTree(&tree, &data[0], &data[1]));
	ASSERT(insertIntoTree(&tree, &data[1], &data[2]));
	ASSERT(insertIntoTree(&tree, &data[2], &data[3]));
	ASSERT(insertIntoTree(&tree, &data[3], &data[4]));
	ASSERT(insertIntoTree(&tree, &data[4], &data[5]));
	disposeTree(&tree);
}
Exemple #8
0
void test_must_search_element_in_the_tree(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[7] = {10,12,30,4,45,5,50};
	ASSERT(insertIntoTree(&tree, NULL, &data[0]));
	ASSERT(insertIntoTree(&tree, &data[0], &data[1]));
	ASSERT(insertIntoTree(&tree, &data[1], &data[2]));
	ASSERT(insertIntoTree(&tree, &data[2], &data[3]));
	ASSERT(insertIntoTree(&tree, &data[3], &data[4]));
	ASSERT(insertIntoTree(&tree, &data[4], &data[5]));
	ASSERT(searchInTree(&tree,&data[4]));
	ASSERT(searchInTree(&tree,&data[2]));
	ASSERT(searchInTree(&tree,&data[0]));
	disposeTree(&tree);
}
Exemple #9
0
void test_must_delete_nodes_from_different_levels(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[7] = {10,12,30,4,45,5,50};
	ASSERT(insertIntoTree(&tree, NULL, &data[0]));
	ASSERT(insertIntoTree(&tree, &data[0], &data[1]));
	ASSERT(insertIntoTree(&tree, &data[1], &data[2]));
	ASSERT(insertIntoTree(&tree, &data[2], &data[3]));
	ASSERT(insertIntoTree(&tree, &data[3], &data[4]));
	ASSERT(insertIntoTree(&tree, &data[4], &data[5]));
	ASSERT(deleteFromTree(&tree, &data[5]));
	result = getChildren(&tree, &data[4]);
	ASSERT(0 == result.hasNext(&result));
	disposeTree(&tree);
}