// Inserting a node void bstree::insert(int x,nodeptr &p) { if (p == NULL) { p = new node; p->element = x; p->left=NULL; p->right = NULL; p->height=0; if (p==NULL) cout<<"\nOut of Space"; } else { if (x<p->element) { insert(x,p->left); if ((bsheight(p->left) - bsheight(p->right))==2) { if (x < p->left->element) p=srl(p); else p = drl(p); } } else if (x>p->element) { insert(x,p->right); if ((bsheight(p->right) - bsheight(p->left))==2) { if (x > p->right->element) p=srr(p); else p = drr(p); } } else cout<<"\nElement Exists"; } int m,n,d; m=bsheight(p->left); n=bsheight(p->right); d=max(m,n); p->height = d + 1; }
// Inserting a node void IntervallTree_bed::insert(long start, long stop, Leaf *&p) { if (p == NULL) { p = new Leaf(start, stop); if (p == NULL) { std::cout << "Out of Space\n" << std::endl; } } else { long score = p->overlap(start, stop); if (score > 0) { insert(start, stop, p->left); if ((bsheight(p->left) - bsheight(p->right)) == 2) { score = p->left->overlap(start, stop); if (score > 0) { p = srl(p); } else { p = drl(p); } } } else if (score < 0) { insert(start, stop, p->right); if ((bsheight(p->right) - bsheight(p->left)) == 2) { score = p->right->overlap(start, stop); if (score < 0) { p = srr(p); } else { p = drr(p); } } } else { //overlaps! std::cerr << "Two regions overlap and are thus ignored:" << std::endl; } } int m, n, d; m = bsheight(p->left); n = bsheight(p->right); d = max(m, n); p->set_height(d + 1); }
nodeptr bstree::drr(nodeptr &p1) { p1->right = srl(p1->right); return srr(p1); }
nodeptr bstree:: drl(nodeptr &p1) { p1->left=srr(p1->left); return srl(p1); }
Leaf * IntervallTree_bed::drr(Leaf * &p1) { p1->right = srl(p1->right); return srr(p1); }
Leaf * IntervallTree_bed::drl(Leaf * &p1) { p1->left = srr(p1->left); return srl(p1); }