解题报告:线段树的查询
2015-07-09 13:11
387 查看
http://www.lintcode.com/zh-cn/problem/segment-tree-query/
/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end, max; * SegmentTreeNode *left, *right; * SegmentTreeNode(int start, int end, int max) { * this->start = start; * this->end = end; * this->max = max; * this->left = this->right = NULL; * } * } */ class Solution { public: /** *@param root, start, end: The root of segment tree and * an segment / interval *@return: The maximum number in the interval [start, end] */ int query(SegmentTreeNode *root, int start, int end) { // write your code here if (root == nullptr)return 0; SegmentTreeNode *left = root->left, *right = root->right; if (end<root->start)return 0;//end超出了最左 if (start>root->end)return 0;//start超出了最右 if (start<root->start)start = left->start;//start超出了最左 if (end>root->end)end = right->end;//end超出了最右 if (start == root->start&&end == root->end)return root->max; if (left->end >= end){//完全左侧 return query(left, start, end); } if (right->start <= start){//完全右侧 return query(right, start, end); } return max(query(left, start, left->end), query(right, right->start, end));//左右之间都有 } };
相关文章推荐
- 安卓卸载一个程序的代码
- C# 中的委托和事件(通俗易懂)
- html 学习笔记2
- HDU 5072 Coprime (单色三角形+容斥原理)
- 百度地图页面上展示
- GRE写作必备句型
- 6.2-1
- Chrome Dev Tool 中时间线各阶段代表的意义
- 转载Mysql的乱码问题
- 关于心理的二十五种倾向(查理·芒格)-1
- MySQL与Oracle 差异比较之数据类型比较
- JavaScript编码规范-Baidu
- 华为 Hybrid-vlan配置,将接口批量加入vlan,配置详解
- ORA-16179: incremental changes to "log_archive_dest_1" not allowed with SPFILE
- smack on android SSL设置记录之学习用keytool生成证书
- register_shutdown_function函数详解
- vim配置
- 安卓启动一个程序的代码
- MySQL与Oracle 差异比较之基本语法的比较
- ubuntu / Ubuntu Kylin下安装和卸载 Nodepadqq