线段树的构造

线段树是一棵二叉树,他的每个节点包含了两个额外的属性startend用于表示该节点所代表的区间。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 {/***@param start, end: Denote an segment / interval*@return: The root of Segment Tree*/public SegmentTreeNode build(int start, int end) {// write your code hereif(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;}
}

Java Code

"""
Definition of SegmentTreeNode:
class SegmentTreeNode:def __init__(self, start, end):self.start, self.end = start, endself.left, self.right = None, None
"""class Solution:    # @param start, end: Denote an segment / interval# @return: The root of Segment Treedef build(self, start, end):# write your code hereif start > end:return Noneroot = SegmentTreeNode(start,end)if start == end:return rootroot.left = self.build(start,( start + end)/2)root.right = self.build(( start + end)/2  + 1,end)return root 

Python Code

lintcode:线段树的构造相关推荐

  1. 线段树(SegmentTree)基础模板

    线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /*** Definition ...

  2. POJ Mayor's posters——线段树+离散化

    原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...

  3. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  4. 高级数据结构 线段树

    线段树 #include<stdio.h> #pragma warning (disabled:4996) #include<malloc.h> //链表实现 typedef ...

  5. HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)

    磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add  把d加到第k个数上去 2 ...

  6. 【转】Senior Data Structure · 浅谈线段树(Segment Tree)

    本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...

  7. 线段树详解(转)这个博客很棒~

    作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/structure/segment-tree/ 1.概述 线 ...

  8. 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)

    目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...

  9. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】

    题意:有nnn个武器和mmm个飞船,武器有下面三种 从给定的集合SSS中击破一个. 在给定的区间[L,R][L,R][L,R]中击破一个. 对于给定的a,b,ca,b,ca,b,c,选择000个或22 ...

最新文章

  1. Objective-C中的KVC与KVO(上)
  2. java双等号比较字符串,Java与两个字符串==比较是错误的?
  3. 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
  4. Ubuntu 迁移 /tmp 到别的硬盘
  5. 你还能再“二”一些吗?
  6. 如何通过信息系统项目管理师+中级备考经验
  7. 加拿大计算机语言学,加拿大语言学专业排名
  8. 天津市电子计算机职业学院,天津市电子计算机职业中等专业学校
  9. JavaScript split() 方法
  10. 还被python收智商税?做大数据的朋友告诉我月薪2w的方法
  11. 《我也能做CTO之程序员职业规划》之七:大学生职业规划技巧
  12. 推荐一个自己喜欢的pycharm主题
  13. cmos和ttl_TTL和CMOS的区别详解
  14. Word基础(三十八)插入书签
  15. linux 如何加定时任务,linux系统添加定时任务
  16. 揭秘苹果内购的大漏洞和内购订阅的黑陷阱
  17. XBrowser增加Jslog日志对象接口
  18. 记一次华硕笔记本找不到引导问题BIOS能识别到硬盘但进不了系统
  19. php获取视频信息,支持优酷土豆新浪腾讯等多家网站
  20. 前端canvas画海报

热门文章

  1. 李飞飞离职Google重返斯坦福,CMU计算机学院院长Andrew Moore接任
  2. Jeff Dean本科论文首次曝光!第一批90后出生时,他就在训练神经网络
  3. 苹果挖角Waymo无人车系统主管,奇女子一枚,曾把车开上火星
  4. 无人车致命车祸视频曝光:Uber技术失败的实锤,一场本可避免的灾难
  5. Mybatis中Mapper.xml文件sql中动态获取----#{}和${}区别
  6. Gnumeric,专业处理数字软件
  7. iphone @selector带参数问题
  8. db链接相关链接相关参数理解
  9. spring-boot-starter家族成员简介
  10. 我的Linux系统的一些截图 之二