int rangeSearch(struct treeNode * node, int leftBound, int rightBound) //returns number of items in the { //write your codes here //int n=0; int l,r; if(node==0)return 0; if(node->item>=leftBound && node->item<=rightBound) { //n++; l=rangeSearch(node->left,leftBound,node->item); r=rangeSearch(node->right,node->item,rightBound); return l+r+1; } else if(node->item>rightBound) { l=rangeSearch(node->left,leftBound,rightBound); return l; } else if(node->item<leftBound) { r=rangeSearch(node->right,leftBound,rightBound); return r; } }
void GLWidget::rangeSearch(TwoDTree::Node *p, RangeQuery &rq, std::vector<QPointF> &includingPoints) { if (p != nullptr) { double l; double r; double coord; if (p->isVertical) { l = qMin(rq.p2.y(), rq.p1.y()); r = qMax(rq.p2.y(), rq.p1.y()); coord = p->value.y(); } else { l = qMin(rq.p2.x(), rq.p1.x()); r = qMax(rq.p2.x(), rq.p1.x()); coord = p->value.x(); } if (p->value.y() <= getHighest(rq) && p->value.y() >= getLowest(rq) && p->value.x() >= getLeftMost(rq) && p->value.x() <= getRightMost(rq)) { includingPoints.push_back(p->value); } if (l < coord) { rangeSearch(p->left, rq, includingPoints); } if (r > coord) { rangeSearch(p->right, rq, includingPoints); } } }
int rangeSearch(struct treeNode * node, int leftBound, int rightBound) //returns number of items in the { //write your codes here if(node == 0) return 0; if(node->item < leftBound) return rangeSearch(node->right, leftBound, rightBound); // node item is less than range, left subtree will also be less if(node->item > rightBound) return rangeSearch(node->left, leftBound, rightBound); // node item is greater than range, so will be right tree else return 1 + rangeSearch(node->left, leftBound, rightBound) + rangeSearch(node->right, leftBound, rightBound); // search both + itself }
int rangeSearch(struct treeNode * node, int leftBound, int rightBound) { if (node==0) return 0; if (node->item>=leftBound && node->item<=rightBound) return (1+rangeSearch(node->left,leftBound,rightBound)+rangeSearch(node->right,leftBound,rightBound)); if (node->item<leftBound) return rangeSearch(node->right,leftBound,rightBound); if (node->item>rightBound) return rangeSearch(node->left,leftBound,rightBound); }
int main(void) { initializeTree(); while(1) { printf("1. Insert item. 2. Delete item. 3. Search item. \n"); printf("4. Print height of tree. 5. Print height of an item. \n"); printf("6. PrintInOrder. 7. Range Search.\n"); int ch; scanf("%d",&ch); if(ch==1) { int item; scanf("%d", &item); insertItem(root, item); } else if(ch==2) { int item; scanf("%d", &item); deleteItem(root, item); } else if(ch==3) { int item; scanf("%d", &item); struct treeNode * res = searchItem(root, item); if(res!=0) printf("Found.\n"); else printf("Not found.\n"); } else if(ch==4) { int height = calcNodeHeight(root); printf("Height of tree = %d\n", height); } else if(ch==5) { int item; scanf("%d", &item); int height = calcHeight(item); printf("Height of %d = %d\n", item, height); } else if(ch==6) { int h = calcNodeHeight(root); printf("\n--------------------------------\n"); printInOrder(root, h); printf("--------------------------------\n"); } else if(ch==7) { int l,r; scanf("%d%d",&l,&r); printf("%d\n",rangeSearch(root,l,r)); } } }
virtual RegexMatch search(const char* data, size_t size) { const char* range = rangePrepare(data, size); RegexMatch result = rangeSearch(range, size); rangeFinalize(range); return result ? RegexMatch(result.data - range + data, result.size) : RegexMatch(); }
void GLWidget::drawPointsInRange() { //RangeQuery rq(QPointF(0.25, 0.75), QPointF(0.75, -0.75)); std::vector<QPointF> includingPoints; rangeSearch(twoDTree.root, rq, includingPoints); // Draw points glBegin( GL_POINTS ); glColor4f( 0.00f, 0.9, 0.0f, 1.0f ); for (auto &point : includingPoints) { glVertex2f( point.x(), point.y() ); } glEnd(); }
int rangeSearch(struct treeNode * node, int leftBound, int rightBound) //returns number of items in the { //write your codes here if(node!=0) { if((node->item>=leftBound)&&(node->item<=rightBound)) { return (1+rangeSearch(node->left,leftBound,rightBound)+rangeSearch(node->right,leftBound,rightBound)); } else if((node->item<=leftBound)) { if(node->item==leftBound) { return (1+rangeSearch(node->right,leftBound,rightBound)); } else { return (rangeSearch(node->right,leftBound,rightBound)); } } else if((node->item>=rightBound)) { if(node->item==rightBound) { return (1+rangeSearch(node->left,leftBound,rightBound)); } else { return (rangeSearch(node->left,leftBound,rightBound)); } } } else { return 0; } }
int main(void) { initializeTree(); while(1) { printf("\n1. Insert item. 2. Delete item. 3. Search item. \n"); printf("4. Print height of tree. 5. Print height of an item. \n"); printf("6. PrintInOrder. 7. Calculate Depth 8. get MinItem. 9. get MaxItem.\n10. Range search. 11. Delete. 12. exit.\n"); int ch; scanf("%d",&ch); if(ch==1) { int item; scanf("%d", &item); insertItem(root, item); } else if(ch==2) { int item; scanf("%d", &item); deleteItem(root, item); } else if(ch==3) { int item; scanf("%d", &item); struct treeNode * res = searchItem(root, item); if(res!=0) printf("Found.\n"); else printf("Not found.\n"); } else if(ch==4) { int height = calcNodeHeight(root); printf("Height of tree = %d\n", height); } else if(ch==5) { int item; scanf("%d", &item); int height = calcHeight(item); printf("Height of %d = %d\n", item, height); } else if(ch==6) { int h = calcNodeHeight(root); printf("\n--------------------------------\n"); printInOrder(root, h); printf("--------------------------------\n"); } else if(ch==12) { break; } else if(ch==7) { int i; scanf("%d",&i); printf("depth %d\n",calcDepth(i)); } else if(ch==8) { printf("min item %d\n",getMinItem()); } else if(ch==9) { printf("max item %d\n",getMaxItem()); } else if(ch==10) { int item1,item2; scanf("%d%d", &item1,&item2); printf("Item number %d",rangeSearch(root,item1,item2)); } else if(ch==11) { int a; scanf("%d",&a); deleteItem(root,a); } } }
int main(void) { //freopen("in2.txt", "r", stdin); initializeTree(); while(1) { //printMenu(); int ch; scanf("%d",&ch); if(ch == 1) { int item; scanf("%d", &item); insertItem(root, item); } else if(ch == 2) { int item; scanf("%d", &item); deleteItem(root, item); } else if(ch == 3) { int item; scanf("%d", &item); struct treeNode * res = searchItem(root, item); if(res!=0) printf("Found.\n"); else printf("Not found.\n"); } else if(ch == 4) { int height = calcNodeHeight(root); printf("Height of tree = %d\n", height); } else if(ch == 5) { int item; scanf("%d", &item); int height = calcHeight(item); printf("Height of %d = %d\n", item, height); } else if(ch == 6) { int h = calcNodeHeight(root); printf("\n--------------------------------\n"); printInOrder(root, h); printf("--------------------------------\n"); } else if(ch == 7) { printf("%d\n", getSize(root)); } else if(ch == 8) { int item; scanf("%d", &item); printf("%d\n", calcDepth(item)); } else if(ch == 9) { printf("%d\n", calcNodeDepth(root)); } else if(ch == 10) { if(root == 0) { printf("tree is empty\n"); continue; } printf("%d\n", getMinItem()); } else if(ch == 11) { if(root == 0) { printf("tree is empty\n"); continue; } printf("%d\n", getMaxItem()); } else if(ch == 12) { int left, right; scanf("%d %d", &left, &right); printf("%d\n", rangeSearch(root, left, right)); } else if(ch == 13) { int item; scanf("%d", &item); //printf("Del : %d\n", item); //deleteItem(root, item); printf("%d\n", deleteItem(root, item)); } else if(ch == 14) { break; } } }