lintcode202-线段树的查询

本文详细介绍了段树查询算法的基本思想及其实现过程。通过递归方式处理查询请求,当目标区间位于当前节点的左侧或右侧时,分别转向左子树或右子树继续查找;当目标区间跨越中点时,则需要同时考虑左右子树的情况,并返回最大值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

思路:在查询过程中,可能会遇到三种情况,目标区间在本区间中点的左边; 在本区间中点的右边; 跨越本区间的中点。

在左边的情况:从当前节点移动到左孩子节点。

在右边的情况:从当前节点移动到右孩子节点。

在中间的情况:从中间分开,两边都要考虑,取其大者。

递归进行。


代码:

int query(SegmentTreeNode * root, int start, int end) {
        // write your code here
        if(start == root->start && end == root->end){
            return root->max;
        }
        
        int mid = root->start + (root->end - root->start)/2;
        if(start > mid){
            return query(root->right, start, end);
        }
        else if(end <= mid){
            return query(root->left, start, end);
        }
        else{
            int l = query(root->left, start, mid);
            int r = query(root->right, mid+1, end);
            return l>=r? l: r;
        }
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值