lintcode-Segment Tree Query II
2016-06-05 本文已影响16人
鬼谷神奇
/**
* Definition of SegmentTreeNode:
* class SegmentTreeNode {
* public:
* int start, end, count;
* SegmentTreeNode *left, *right;
* SegmentTreeNode(int start, int end, int count) {
* this->start = start;
* this->end = end;
* this->count = count;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
*@param root, start, end: The root of segment tree and
* an segment / interval
*@return: The count number in the interval [start, end]
*/
int query(SegmentTreeNode *root, int start, int end) {
// write your code here
if(root == NULL) { return 0; }
if(start > end || start > root->end || end < root->start) { return 0; }
if(start <= root->start && end >= root->end) { return root->count; }
int mid = (root->start + root->end) / 2;
int left = query(root->left, start, min(mid, end));
int right = query(root->right, max(mid, start), end);
return left+right;
}
};