线段树查询2
2015-09-26 13:17
267 查看
对于一个数组,我们可以对其建立一棵
(数组中并不一定每个位置上都有元素)
实现一个
分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start, end]内的元素个数。
线段树, 每个结点存储一个额外的值
count来代表这个结点所指代的数组区间内的元素个数.
(数组中并不一定每个位置上都有元素)
实现一个
query的方法,该方法接受三个参数
root,
start和
end,
分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start, end]内的元素个数。
/** * 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) { if(root==NULL||start>end||start>root->end||end<root->start) return 0; int mid=root->start+(root->end - root->start)/2; if(start==root->start&&end==root->end) return root->count; if(root->start==root->end) return root->count; if(start>mid) return query(root->right,start,end); if(end<=mid) return query(root->left,start,end); return query(root->left,start,mid)+query(root->right,mid+1,end); } };
相关文章推荐
- ios基础-基础视图
- 201509——hulu笔试题目——rainfall
- 项目部署:多个jar包加入到classpath
- 【软考之路】-数据结构
- android悬浮窗口的实现 Windowmanager
- 单例模式——不必多记,只记所需
- OpenCV-跟我一起学数字图像处理之拉普拉斯算子
- 模拟Spring的内部实现
- java.lang.OutOfMemoryError: Java heap space解决方法
- 黑马程序员-----java基础(面向对象基础)
- web开发性能优化---UI接口章
- C# Use Pop3Client to read gmail
- JavaScript高级程序设计之基本概念之操作符之乘性操作符第3.5.4讲笔记
- Mongodb
- 图像处理中的数学原理详解(Part3)
- 解决IOS "Illegal instruction:4"
- iOS中类似java抽象类理解。
- countRectangles
- 文章标题
- Varnish 安装配置