您的位置:首页 > 其它

<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));
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: