lintcode:线段树的构造
线段树的构造
线段树是一棵二叉树,他的每个节点包含了两个额外的属性start
和end
用于表示该节点所代表的区间。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:线段树的构造相关推荐
- 线段树(SegmentTree)基础模板
线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /*** Definition ...
- POJ Mayor's posters——线段树+离散化
原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...
- 数据结构---线段树
线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326 持续更新中··· 一:线段树基本概念 1:概述 线段树 ...
- 高级数据结构 线段树
线段树 #include<stdio.h> #pragma warning (disabled:4996) #include<malloc.h> //链表实现 typedef ...
- HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add 把d加到第k个数上去 2 ...
- 【转】Senior Data Structure · 浅谈线段树(Segment Tree)
本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...
- 线段树详解(转)这个博客很棒~
作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/structure/segment-tree/ 1.概述 线 ...
- 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)
目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...
- 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】
题意:有nnn个武器和mmm个飞船,武器有下面三种 从给定的集合SSS中击破一个. 在给定的区间[L,R][L,R][L,R]中击破一个. 对于给定的a,b,ca,b,ca,b,c,选择000个或22 ...
最新文章
- Objective-C中的KVC与KVO(上)
- java双等号比较字符串,Java与两个字符串==比较是错误的?
- 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
- Ubuntu 迁移 /tmp 到别的硬盘
- 你还能再“二”一些吗?
- 如何通过信息系统项目管理师+中级备考经验
- 加拿大计算机语言学,加拿大语言学专业排名
- 天津市电子计算机职业学院,天津市电子计算机职业中等专业学校
- JavaScript split() 方法
- 还被python收智商税?做大数据的朋友告诉我月薪2w的方法
- 《我也能做CTO之程序员职业规划》之七:大学生职业规划技巧
- 推荐一个自己喜欢的pycharm主题
- cmos和ttl_TTL和CMOS的区别详解
- Word基础(三十八)插入书签
- linux 如何加定时任务,linux系统添加定时任务
- 揭秘苹果内购的大漏洞和内购订阅的黑陷阱
- XBrowser增加Jslog日志对象接口
- 记一次华硕笔记本找不到引导问题BIOS能识别到硬盘但进不了系统
- php获取视频信息,支持优酷土豆新浪腾讯等多家网站
- 前端canvas画海报
热门文章
- 李飞飞离职Google重返斯坦福,CMU计算机学院院长Andrew Moore接任
- Jeff Dean本科论文首次曝光!第一批90后出生时,他就在训练神经网络
- 苹果挖角Waymo无人车系统主管,奇女子一枚,曾把车开上火星
- 无人车致命车祸视频曝光:Uber技术失败的实锤,一场本可避免的灾难
- Mybatis中Mapper.xml文件sql中动态获取----#{}和${}区别
- Gnumeric,专业处理数字软件
- iphone @selector带参数问题
- db链接相关链接相关参数理解
- spring-boot-starter家族成员简介
- 我的Linux系统的一些截图 之二