博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode:线段树的构造
阅读量:7122 次
发布时间:2019-06-28

本文共 2017 字,大约阅读时间需要 6 分钟。

线段树是一棵二叉树,他的每个节点包含了两个额外的属性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 here        if(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, end        self.left, self.right = None, None"""class Solution:        # @param start, end: Denote an segment / interval    # @return: The root of Segment Tree    def build(self, start, end):        # write your code here        if start > end:            return None        root = SegmentTreeNode(start,end)        if start == end:            return root        root.left = self.build(start,( start + end)/2)        root.right = self.build(( start + end)/2  + 1,end)                return root
Python Code

 

 

转载地址:http://lbael.baihongyu.com/

你可能感兴趣的文章
Kevin Systrom和他的Instagram
查看>>
Android 实现真机远程调试并适应7寸屏大小
查看>>
Oracle优化:千万级大表逻辑判断的累赘
查看>>
研讨会记录|与Xamarin工作簿研讨会探索UrhoSharp 3D
查看>>
python join 和 split的常用使用方法
查看>>
Oracle数据库日常管理之数据备份,恢复及迁移 (第八讲 )
查看>>
一段Winrunner的样例脚本
查看>>
IPSec应用方案设计
查看>>
FOSCommentBundle功能包:创建您的评论类和线索类
查看>>
C++动态数组再总结
查看>>
如何通过sar快速定位制约系统性能的瓶颈
查看>>
Java 枚举用法详解
查看>>
走在网页游戏开发的路上(十一)
查看>>
oc58--Category注意事项
查看>>
Linux下安装OpenOffice
查看>>
C# 在根据窗体中的表格数据生成word文档时出错
查看>>
Java事务处理类(源码)
查看>>
JAVA 设计模式 访问者模式
查看>>
SQL Server清空日志及所有表的数据
查看>>
浅谈ThreadPool 线程池
查看>>