Exemple #1
0
node* CREATE_INTERVAL_TREE(int l, int u, int n) //working correctly
{
    if(n==0)
        return NULL;
    if(n==1)
    {
        node *temp = (node*)malloc(sizeof(node));
        temp->lower=l;
        temp->upper=u;
        list *templist = (list*)malloc(sizeof(list));
        templist->next=NULL;
        templist->data=0;
        temp->listptr=templist;
        temp->lChild=NULL;
        temp->rChild=NULL;
        return temp;
    }
    int nn=n/2+1; //median interval number
    int rem=(u-l+1)%n;
    node *temp = (node*)malloc(sizeof(node));
    temp->lower=(nn-1)*interval+l+rem/2;
    temp->upper=nn*interval+l-1+rem-rem/2;
    list *templist = (list*)malloc(sizeof(list));
    templist->next=NULL;
    templist->data=0;
    temp->listptr=templist;
    temp->lChild=CREATE_INTERVAL_TREE(l,temp->lower-1,nn-1);
    temp->rChild=CREATE_INTERVAL_TREE(temp->upper+1,u,n-nn);
    return temp;
}
Exemple #2
0
int main()
{
    srand(time(NULL));
    int l,u,n,i,loop;
    l=1;u=100;n=15;i=30;
    /*
    printf("Enter l : ");
    scanf("%d",&l);
    printf("Enter u : ");
    scanf("%d",&u);
    printf("Enter n : ");
    scanf("%d",&n);
    printf("Enter i : ");
    scanf("%d",&i);
    */
    interval=(u-l+1)/n;
    node *root = (node*)malloc(sizeof(node));
    root = CREATE_INTERVAL_TREE(l, u, n);
    for(loop=1;loop<=i;loop++)
    {
        int k=l+rand()%(u-l+1);
        INSERT(root,k);
    }
    PRETTY_PRINT(root, maxDepth(root));
    printf("\n");
    MERGE(root,2,10);
    PRETTY_PRINT(root, maxDepth(root));
    printf("\n");
}
Exemple #3
0
Node* CREATE_INTERVAL_TREE(Node* root,int low,int up,int n,int length,int level)
{	

	//scanf("%d",&as);
	if(up==0 && low==0)
	{
		printf("***********************************************************************************************************************\n");
	}
	if(up-low == length)
	{
		//printf("Tree data %d %d\n",root->l,root->u);
		//printf("Tree %d %d %d %d \n",low ,up ,low ,up );
		root->l=low;
		root->u=up;
		root->list=NULL;
		root->left=NULL;
		root->right=NULL;
		printf("1 Tree data %d %d\n",root->l,root->u);
		return;
		/*printf("Reject %d %d \n",low,up);
		root->parent->right=NULL;
		root->parent->left=NULL;
		return;
*/
	}
	if(up-low < length && up!=low)
	{
		//printf("Tree data %d %d\n",root->l,root->u);
		//printf("Tree %d %d %d %d \n",low ,up ,low ,up );
		root->l=low;
		root->u=up;
		root->list=NULL;
		root->left=NULL;
		root->right=NULL;
		printf("2 Tree data %d %d\n",root->l,root->u);
		return;
	}
	if(up-low<length)
		return;
	Node* leftNode = malloc(sizeof(Node));
	Node* rightNode = malloc(sizeof(Node));
	//int length= ceil((u-l)/(n*1.00);
	int medianStart = low + (n/2)*length;
	int medianEnd = medianStart + length;

	printf("****************%d %d %d %d %d\n",medianStart,medianEnd,low,up,n/2);


	root->l=medianStart;
	root->u=medianEnd;
	root->list=NULL;
	root->left=leftNode;
	root->right=rightNode;
	leftNode->parent=root;
	rightNode->parent=root;


	//printf("Tree %d %d %d %d \n",low ,up ,medianStart,medianEnd );
	printf("3 Tree data %d %d\n",root->l,root->u);
	//printf("%d %d %d %d %d %d %d \n",low,up,n,length,level,medianStart,medianEnd);
	//scanf("%d",&as);
	//printf("Left %d %d \n",low,medianStart);
	//printf("Right %d %d \n",medianEnd,up);

	if(root->l==0 && root->u==0)
	{
		printf("***********************************************************************************************************************\n");
	}
	CREATE_INTERVAL_TREE(leftNode,low,medianStart,n/2,length,level+1);
	//scanf("%d",&as);
	
	CREATE_INTERVAL_TREE(rightNode,medianEnd,up,n/2 -1,length,level+1);

	
	

}