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; }
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"); }
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); }