<LeetCode> 题202:线段树的查询
2016-08-03 18:37
225 查看
题目描述:
对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。为SegmentTree设计一个 query 的方法,接受3个参数root, start和end,线段树root所代表的数组中子区间[start, end]内的最大值。
例如:
对于数组 [1, 4, 2, 3], 对应的线段树为:
query(root, 1, 1), return 4
query(root, 1, 2), return 4
query(root, 2, 3), return 3
query(root, 0, 2), return 4
数据结构:
/** * 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: int query(SegmentTreeNode *root, int start, int end) { if(root == NULL) { return NULL; } if(root->start >= start && root->end <= end) { return root->max; } int mid = (root->start + root->end) / 2; if(mid < start) { return query(root->right, start, end); } else if(mid + 1 > end) { return query(root->left, start, end); } else { return max(query(root->right, start, end), query(root->left, start, end)); } } };
相关文章推荐
- <LeetCode> 题247:线段树的查询(2)
- <转>在xslt中实现split方法对查询字符串进行分隔
- <转> 线段树区间并
- <LeetCode><Easy>223 Rectange Area
- <LeetCode><Easy> 169 Majority Element
- <LeetCode><Easy> 171 Excel Sheet Column Number
- <转>使用 Visual C# .NET 在 XPath 查询中指定完全限定的元素名称
- <LeetCode><Easy> 118 Pascal's Triangle
- <LeetCode><Easy>231 Power of Two
- <LeetCode><Easy>258Add Digits
- <LeetCode><Easy> 160 Intersection Of Two Listed Lists
- <Power Shell>07查询AD角色拥有者和备份企业SQL数据库和日志
- <Leetcode>TWO SUM
- <leetcode> Permutations
- <LeetCode><Easy> 228 Summary Ranges
- <转>使用IdentifyTask查询图层属性
- <leetcode> Combination Sum
- <Leetcode>Median of Two Sorted Arrays
- <LeetCode><Easy> 203 Remove Linked List Elements
- <LeetCode><Easy> 125 Valid Palindrome