【线段树】一种二叉搜索树

线段树是什么 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。(以上转自百度百科)如果我们用根节点代表1~n这个区间,那么它的左儿子节点就代表区间1~(n+1)div 2,右儿子代表区间(n+1)div 2+1~n,以此类推(如下图) 线段树如何实现我们用深搜来插入,查询与修改。 1,建树与区间查询 每次走到一...
摘要由CSDN通过智能技术生成

线段树是什么

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。(以上转自百度百科)

如果我们用根节点代表1~n这个区间,那么它的左儿子节点就代表区间1~(n+1)div 2,右儿子代表区间(n+1)div 2+1~n,以此类推(如下图)
这里写图片描述

线段树如何实现

我们用深搜来插入,查询与修改。
1,建树与区间查询
每次走到一个节点时,判断其是否被要查询的区间完全包含(如1~5完全包含1~4),如完全包含则将其保存的信息加入查询结果中,
若不被完全包含,则分三种情况讨论:
我们先设要查询的区间为l~r,当前节点代表的区间为l1~r1,分成两个区间l1~mid与mid+1~r1

  1. 若l<=mid且r>mid,说明要查询的区间同时涉及当前节点的左右儿子,所以两个区间l1~mid和mid+1~r都要深搜
  2. 若r<=mid则说明要查询的区间只涉及当前节点的左儿子,所以我们深搜左儿子
  3. l>=mid+1,与情况2类似。
    这里可以说运用了分治的思想,因为我们要查询l~r,而l~r不一定刚好是某个节点代表的区间,所
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值