线段树查询

对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。

为SegmentTree设计一个 query 的方法,接受3个参数rootstartend,线段树root所代表的数组中子区间[start, end]内的最大值。

您在真实的面试中是否遇到过这个题?  
Yes
样例

对于数组 [1, 4, 2, 3], 对应的线段树为:

                  [0, 3, max=4]
                 /             \
          [0,1,max=4]        [2,3,max=3]
          /         \        /         \
   [0,0,max=1] [1,1,max=4] [2,2,max=2], [3,3,max=3]

query(root, 1, 1), return 4

query(root, 1, 2), return 4

query(root, 2, 3), return 3

class Solution {
public:
    int query(SegmentTreeNode *root, int start, int end) {
        int small=root->start,big=root->end,mid=small+(big-small)/2;
        if(start==small&&end==big) return root->max;
        else if(start>mid) return query(root->right,start,end);
        else if(end<=mid) return query(root->left,start,end);
        else{
            return max(query(root->left,start,mid),query(root->right,mid+1,end));
        }
    }
};


你可能感兴趣的:(线段树查询)