#201 Segment Tree Build
来源:互联网 发布:知世公主和小樱公主 编辑:程序博客网 时间:2024/05/16 07:42
题目描述:
The structure of Segment Tree is a binary tree which each node has two attributesstart
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.
Clarification
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
Example
题目思路: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]
这题就是简单的recursion。
Mycode(AC = 276ms):
/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end; * SegmentTreeNode *left, *right; * SegmentTreeNode(int start, int end) { * this->start = start, this->end = end; * this->left = this->right = NULL; * } * } */class Solution {public: /** *@param start, end: Denote an segment / interval *@return: The root of Segment Tree */ SegmentTreeNode * build(int start, int end) { // write your code here if (start > end) { return NULL; } else if (start == end) { return new SegmentTreeNode(start, end); } else { SegmentTreeNode *root = new SegmentTreeNode(start, end); root->left = build(start, (start + end) / 2); root->right = build((start + end) / 2 + 1, end); return root; } }};
0 0
- #201 Segment Tree Build
- Lintcode - 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)
- 古筝慢练没效果?寻找多年答案原来这里!
- 一种MySQL到HBase的迁移策略的研究与实现
- 用css写可以下拉的导航栏
- 在ListView控件上实现手势滑动事件
- SQL Server 中统计每个数据表的大小
- #201 Segment Tree Build
- 程序员该用哪种姿势来理财
- 什么是你最好的省时方式?
- Doxygen使用学习(四)------Doxygen的特殊命令字之"小节指示命令"
- C++检测鼠标某键是否按下
- eclipse中java程序的中文乱码问题
- ANDROID应用开发架构概述
- Doxygen使用学习(五)------Doxygen的特殊命令字之"创建连接命令"
- TCP-客户端多线程并发登陆服务端