示例#1
0
文件: test-2.c 项目: xfdz/academics
void main()
{
	int             i;
	m_tree_t       *t;;
	printf("starting \n");
	t = create_m_tree();
	
	for (i = 0; i < 50; i++)
		insert_interval(t, 2 * i, 2 * i + 1);
	
	printf("inserted first 50 intervals, total length is %d, should be 50.\n", query_length(t));
	insert_interval(t, 0, 100);
	printf("inserted another interval, total length is %d, should be 100.\n", query_length(t));
	
	for (i = 1; i < 50; i++)
		insert_interval(t, 199 - (3 * i), 200);	/* [52,200] is longest */
	printf("inserted further 49 intervals, total length is %d, should be 200.\n", query_length(t));
	
	for (i = 2; i < 50; i++)
		delete_interval(t, 2 * i, 2 * i + 1);
	delete_interval(t, 0, 100);
	printf("deleted some intervals, total length is %d, should be 150.\n", query_length(t));
	insert_interval(t, 1, 2);
	
	for (i = 49; i > 0; i--)
		delete_interval(t, 199 - (3 * i), 200);
	insert_interval(t, 0, 2);
	insert_interval(t, 1, 5);
	printf("deleted some intervals, total length is %d, should be 5.\n", query_length(t));
	insert_interval(t, 0, 100);
	printf("inserted another interval, total length is %d, should be 100.\n", query_length(t));
	
	for (i = 0; i <= 3000; i++)
		insert_interval(t, 2000 + i, 3000 + i);
	printf("inserted 3000 intervals, total length is %d, should be 4100.\n", query_length(t));
	
	for (i = 0; i <= 3000; i++)
		delete_interval(t, 2000 + i, 3000 + i);
	printf("deleted 3000 intervals, total length is %d, should be 100.\n", query_length(t));
	
	for (i = 0; i <= 100; i++)
		insert_interval(t, 10 * i, 10 * i + 100);
	printf("inserted another 100 intervals, total length is %d, should be 1100.\n", query_length(t));
	delete_interval(t, 1, 2);
	delete_interval(t, 0, 2);
	delete_interval(t, 2, 3);
	delete_interval(t, 0, 1);
	delete_interval(t, 1, 5);
	printf("deleted some intervals, total length is %d, should be still 1100.\n", query_length(t));
	
	for (i = 0; i <= 100; i++)
		delete_interval(t, 10 * i, 10 * i + 100);
	delete_interval(t, 0, 100);
	printf("deleted last interval, total length is %d, should be 0.\n", query_length(t));

}
示例#2
0
//member function for debug  and test
//
void m_tree_t::printTree()
{
	printf("the total number is %d\n", num);
	printf("the union is %d \n", query_length(this));
	node **	stack = new node*[num];
	node ** astack = new node* [num];

	int sindex = -1;
	int aindex = -1;

	node * pnode = root;

	if(root == NULL)
		printf("empty tree\n");
	else
		printf("%d \n", pnode ->key);

	sindex ++;
	stack[sindex] = pnode;


	//node * tmp = pnode ->left;
	while(sindex > -1)
	{

		while(sindex >= 0)
		{
			node * upper = stack[sindex];
			sindex --;
			if(upper ->left != NULL && upper ->left ->left != NULL)
				printf("%d ", upper->left ->key);
			else
				printf("Lf ");
			if(upper ->right != NULL && upper ->right ->left != NULL)
				printf("%d ", upper ->right ->key);
			else
				printf("lf ");
			if( upper ->left !=NULL && upper ->left ->left != NULL)
			{
				aindex ++;
				astack[aindex] = upper ->left;
			}
			if(upper ->right != NULL && upper ->right ->left != NULL)
			{
				aindex ++;
				astack[aindex] = upper ->right;

			}
		}
		printf("\n");


		while(aindex >= 0)
		{
			node * tmp = astack[aindex];
			aindex --;

			sindex ++;
			stack[sindex] = tmp;

		}
	}//end of while

	printf("\n");
}