Check this one once..I hope it will work now..I hv introduced two more variables check1 and check2 * void findsum(node *T,int key) { int n = countnodes(T);//returns the number of nodes in the BST int i=0; int j=n-1; node *cur1,*cur2,*p1,*p2; cur1=cur2=T; int flag1,flag2,sum; flag1=flag2=1; int check1,check2; check1=check2=0; while(i<j) { if(cur1->left == NULL && cur2->right == NULL) { sum = checksum(cur1,cur2,key); if(sum==0) //if cur1->data + cur2->data ==key { i++;j--; flag1=flag2=1; cur1 = cur1->right; cur2 = cur2>left; } if(sum>0) //if cur1->data + cur2->data > key { cur2 = cur2->left; flag1 = 0; //do not do anything with the left traversal j--; check1 = 1; } if(sum<0) //if cur1->data + cur2->data <key { cur1 = cur1->right; flag2 = 0;//do not do anything with the right traversal i++; check2 = 1; } } else { if(flag1 && cur1->left!=NULL) { p1 = cur1->left; while(p1->right!=NULL && p1->right!=cur1) p1 = p1->right; if(p1->right == NULL) { p1->right = cur1; cur1 = cur1->left; check1 = 0; } else // p1->right = cur1 check1 = 1; } if(flag2 && cur2->right!=NULL) { p2 = cur2->right; while(p2->left!=NULL && p2->left!=cur2) p2 = p2->left; if(p2->left == NULL) { p2->left = cur2; cur2 = cur2->right; check2 = 0; } else //p2->left = cur2 check2 = 1; } if(check1 && check2) { sum = checksum(cur1,cur2,key); if(sum==0) //if cur1->data + cur2->data ==key { if(cur1->left == NULL) { cur1 = cur1->right; flag1 = 0; } else if(p1->right == cur1) { p1->right = NULL; cur1 = cur1->right; flag1 = 1; }
if(cur2->right == NULL) { cur2 = cur2->left; flag2 = 0; } else if(p2->left == cur2) { p2->left = NULL; cur2 = cur2->left; flag2 = 1; } i++;j--; } if (sum<0) //if cur1->data + cur2->data < key { if(cur1->left == NULL) { cur1 = cur1->right; flag1 = 0; } else if(p1->right == cur1) { p1->right = NULL; cur1 = cur1->right; flag1 = 1; } i++; } if(sum>0)//if cur1->data + cur2->data > key { if(cur2->right == NULL) { cur2 = cur2->left; flag2 = 0; } else if(p2->left == cur2) { p2->left = NULL; cur2 = cur2->left; flag2 = 1; } j--; } } } } //final correction of the links can be done again } int checksum ( node *c1,node *c2,int key) { if(c1->data+c2->data == key) return 0; else if(c1->data+c2->data > key) return 1; else return -1; }* > > -- *Piyush Sinha* *IIIT, Allahabad* *+91-7483122727* * <https://www.facebook.com/profile.php?id=100000655377926> "NEVER SAY NEVER" * -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.