本文共 1924 字,大约阅读时间需要 6 分钟。
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:
build
method.start=A.left, end=(A.left + A.right) / 2
.start=(A.left + A.right) / 2 + 1, end=A.right
.Implement a build
method with two parameters startand 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:
See wiki:
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]
这道题让我们建立线段树,也叫区间树,是一种高级树结构,但是题目中讲的很清楚,所以这道题实现起来并不难,我们可以用递归来建立,写法很简单,参见代码如下:
class Solution {public: /** *@param start, end: Denote an segment / interval *@return: The root of Segment Tree */ SegmentTreeNode * build(int start, int end) { if (start > end) return NULL; SegmentTreeNode *node = new SegmentTreeNode(start, end); if (start < end) { node->left = build(start, (start + end) / 2); node->right = build((start + end) / 2 + 1, end); } return node; }};
本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。