博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Segment Tree Build 建立线段树
阅读量:7300 次
发布时间:2019-06-30

本文共 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:

  • The root's start and end is given by build method.
  • The left child of node A hasstart=A.left, end=(A.left + A.right) / 2.
  • The right child of node A hasstart=(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 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.

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:

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]

这道题让我们建立线段树,也叫区间树,是一种高级树结构,但是题目中讲的很清楚,所以这道题实现起来并不难,我们可以用递归来建立,写法很简单,参见代码如下:

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的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
upc组队赛1 小C的数学问题【单调栈】(POJ2796)
查看>>
Alpha 冲刺报告(3/10)
查看>>
Event事件
查看>>
kill qz _e epi,eu,ex,exo out3
查看>>
表单验证,添加动态class
查看>>
java读取ACCESS数据库的简单示例
查看>>
linux设置开机自启动
查看>>
tab切换(js+css)
查看>>
Java实体类对象修改日志记录
查看>>
Android实例-手机震动(XE8+小米2)
查看>>
音频,视频项目
查看>>
关于expanded一级二级菜单数据的分组排序
查看>>
金环(2017佛山市选拔初中组)
查看>>
hexo搭建教程
查看>>
9月14日学习内容整理:初识别面向对象
查看>>
12月20日学习内容整理:博客系统之media配置
查看>>
Flask的闪现(message) 请求扩展 中间件 蓝图
查看>>
大三下学期第四周总结
查看>>
vue学习笔记(WebStorm安装)
查看>>
《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)
查看>>