lintcode -- 线段树的构造
来源:互联网 发布:ubuntu安装numpy 编辑:程序博客网 时间:2024/05/18 03:29
线段树是一棵二叉树,他的每个节点包含了两个额外的属性start
和end
用于表示该节点所代表的区间。start和end都是整数,并按照如下的方式赋值:
- 根节点的 start 和 end 由
build
方法所给出。 - 对于节点 A 的左儿子,有
start=A.left, end=(A.left + A.right) / 2
。 - 对于节点 A 的右儿子,有
start=(A.left + A.right) / 2 + 1, end=A.right
。 - 如果 start 等于 end, 那么该节点是叶子节点,不再有左右儿子。
实现一个 build
方法,接受 start 和 end 作为参数, 然后构造一个代表区间 [start, end]
的线段树,返回这棵线段树的根。
线段树(又称区间树), 是一种高级数据结构,他可以支持这样的一些操作:
- 查找给定的点包含在了哪些区间内
- 查找给定的区间包含了哪些点
见百科:
线段树
区间树
比如给定start=1, end=6
,对应的线段树为:
[1, 6] / \ [1, 3] [4, 6] / \ / \ [1, 2] [3,3] [4, 5] [6,6] / \ / \
[1,1] [2,2] [4,4] [5,5]
/** * Definition of SegmentTreeNode: * public class SegmentTreeNode { * public int start, end; * public SegmentTreeNode left, right; * public SegmentTreeNode(int start, int end) { * this.start = start, this.end = end; * this.left = this.right = null; * } * } */public class Solution { public SegmentTreeNode build(int start,int end){ if(start > end) return null; SegmentTreeNode root = new SegmentTreeNode(start,end); if(start == end)return root; root.left = build(start,(start+end)/2); root.right = build((start+end)/2+1,end); return root; }}
- LintCode:线段树的构造
- lintcode -- 线段树的构造
- 线段树的构造-LintCode
- lintcode-线段树的构造-201
- LintCode:线段树的构造 II
- 线段树的构造 II-LintCode
- lintcode segment-tree-build 线段树的构造
- LintCode:线段树的查询
- LintCode:线段树的修改
- lintcode线段树的应用
- 线段树的查询-LintCode
- 线段树的修改-LintCode
- [LintCode]Segment Tree Build 构造线段树
- 线段树的构造
- 线段树的构造
- lintcode-线段树的查询-202
- lintcode-线段树的修改-203
- LintCode:线段树的查询II
- js运动技术--链式运动框架
- 定位:static、fixed、relative、absolute
- 计算两日期相差几天
- submit,re,eval
- 深入了解MyBatis参数
- lintcode -- 线段树的构造
- 原生js获取select的option项的label和value值
- POJ
- 汉诺塔问题
- 术--经典题解析(1)
- CSS盒子模型和部分选择器
- Oracle中通过substr和instr实现截取指定字符之间的字符串:
- luogu1967 货车运输
- 自定义控件三部曲之绘图篇——Path之贝赛尔曲线和手势轨迹、水波纹效果