线段树的查询-LintCode

在数据结构中,线段树是一种高效的数据结构,用于处理区间查询和更新问题。这篇博客探讨了如何在线段树中设计一个query方法,用于查询给定区间内整数数组的最大值。以数组[1, 4, 2, 3]为例,介绍了不同查询范围如[1, 1]、[1, 2]、[2, 3]、[0, 2]等的处理方式,返回相应区间的最大值。" 112927726,10539999,深入理解Python函数参数:默认值、位置与打包,"['Python', '函数参数', '编程', '默认值']
摘要由CSDN通过智能技术生成

对于一个有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

#ifndef C202_H
#define C202_H
#include<iostream>
#include<vector>
using namespace std;
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: The root of segment tree.
    * @param start: start value.
    * @param end: end value.
    * @return: The maximum number in the interval [start, end]
    */
    int query(SegmentTreeNode * root, int start, int end) {
        // write your code here
        if (start > end||start<root->start||end>root->end)
            return 0;
        SegmentTreeNode *node = root;
        if (start == node->start&&end == node->end)
            return node->max;
        if (end <= node->left->end)
            return query(node->left, start, end);
        else if (start >= node->right->start)
            return query(node->right, start, end);
        else
        {
            return maxVal(query(node->left, start, node->left->end), query(node->right, node->right->start, end));
        }
    }
    int maxVal(int a, int b)
    {
        return a > b ? a : b;
    }
};
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值