Segment Tree Build
来源:互联网 发布:常用的sql注入工具 编辑:程序博客网 时间:2024/06/05 00:33
The structure of Segment Tree is a binary tree which each node has two attributes start
and end
denote an segment / interval.
start and end are both integers, they should be assigned in following rules:
- The root's start and end is given by
build
method. - The left child of node A has
start=A.left, end=(A.left + A.right) / 2
. - The right child of node A has
start=(A.left + A.right) / 2 + 1, end=A.right
. - if start equals to end, there will be no children for this node.
Implement a build
method with two parameters start and end, so that we can create a corresponding segment tree with every node has the correct start and end value, return the root of this segment tree.
Segment Tree (a.k.a Interval Tree) is an advanced data structure which can support queries like:
- which of these intervals contain a given point
- which of these points are in a given interval
See wiki:
Segment Tree
Interval Tree
Given start=0, end=3
. The segment tree will be:
[0, 3] / \ [0, 1] [2, 3] / \ / \ [0, 0] [1, 1] [2, 2] [3, 3]
Given start=1, end=6
. The segment tree will be:
[1, 6] / \ [1, 3] [4, 6] / \ / \ [1, 2] [3,3] [4, 5] [6,6] / \ / \[1,1] [2,2] [4,4] [5,5]
The structure of Segment Tree is a binary tree which each node has two attributes start
and end
denote an segment / interval.
start and end are both integers, they should be assigned in following rules:
- The root's start and end is given by
build
method. - The left child of node A has
start=A.left, end=(A.left + A.right) / 2
. - The right child of node A has
start=(A.left + A.right) / 2 + 1, end=A.right
. - if start equals to end, there will be no children for this node.
Implement a build
method with two parameters start and end, so that we can create a corresponding segment tree with every node has the correct start and end value, return the root of this segment tree.
Segment Tree (a.k.a Interval Tree) is an advanced data structure which can support queries like:
- which of these intervals contain a given point
- which of these points are in a given interval
See wiki:
Segment Tree
Interval Tree
Given start=0, end=3
. The segment tree will be:
[0, 3] / \ [0, 1] [2, 3] / \ / \ [0, 0] [1, 1] [2, 2] [3, 3]
Given start=1, end=6
. The segment tree will be:
[1, 6] / \ [1, 3] [4, 6] / \ / \ [1, 2] [3,3] [4, 5] [6,6] / \ / \[1,1] [2,2] [4,4] [5,5]
现在开始,要尽量少的看提示,尽量靠自己想出结果。毕竟题目是永远做不完的,一直凭靠什么并不是长久来看可以接受的方式。
这道题就是自己做的,虽然很简单。但是也希望无论简单到困难,都要一个人完整的经历一遍,要有自己的思路。而且要很清楚为什么是对的。
这道题的思路比较简单,递归构建segment tree就好,注意下右子树的start = mid+1 就好,其他的应该问题不大。
代码:
public SegmentTreeNode build(int start, int end) { // write your code here if(start > end) return null; if(start == end) return new SegmentTreeNode(start, end); int mid = (start + end)/2; SegmentTreeNode left = build(start, mid); SegmentTreeNode right = build(mid+1, end); SegmentTreeNode node = new SegmentTreeNode(start, end); node.left = left; node.right = right; return node; }
- Lintcode - Segment Tree Build
- #201 Segment Tree Build
- [Lintcode]Segment Tree Build
- Segment Tree Build
- Segment Tree Build
- Segment Tree Build II
- #439 Segment Tree Build II
- *[Lintcode]Segment Tree Build II
- [LintCode]Segment Tree Build 构造线段树
- lintcode segment-tree-build 线段树的构造
- Segment tree
- Segment Tree
- Segment Tree
- segment Tree
- Segment Tree
- Segment Tree
- 201.Segment Tree Build-线段树的构造(中等题)
- 线段树(segment tree)
- 重构-改善既有代码的设计读书笔记(六)
- ZCMU—1306
- ibatis报错之一
- VS 出现筛选器“xxx”下已存在项目“xxx.cpp”
- 整理一点js知识
- Segment Tree Build
- WebRTC源码分析二:音频模块结构
- Fibonacci数列
- iOS 支付宝ali64系统繁忙
- Quartz+Spring集成配置
- Android下如何读取文件的内容
- WebRTC源码分析三:视频处理流程
- 字母图形
- deb打包+软件图标+加到系统菜单+安装卸载实例