• Lintcode: Segment Tree Build


    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 has start=A.left, end=(A.left + A.right) / 2.
    The right child of node A has start=(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 start and 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.
    
    Have you met this question in a real interview? Yes
    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]
    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:
    Segment Tree
    Interval Tree
     1 /**
     2  * Definition of SegmentTreeNode:
     3  * public class SegmentTreeNode {
     4  *     public int start, end;
     5  *     public SegmentTreeNode left, right;
     6  *     public SegmentTreeNode(int start, int end) {
     7  *         this.start = start, this.end = end;
     8  *         this.left = this.right = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     /**
    14      *@param start, end: Denote an segment / interval
    15      *@return: The root of Segment Tree
    16      */
    17     public SegmentTreeNode build(int start, int end) {
    18         // write your code here
    19         if (start > end) return null;
    20         if (start == end) return new SegmentTreeNode(start, start);
    21         SegmentTreeNode cur = new SegmentTreeNode(start, end);
    22         cur.left = build(cur.start, (cur.start+cur.end)/2);
    23         cur.right = build((cur.start+cur.end)/2+1, cur.end);
    24         return cur;
    25     }
    26 }
  • 相关阅读:
    verilog parameter 位宽问题
    quartus prime 16.0 报警告 inferring latch
    Quartus prime16.0 组合逻辑always块中敏感向量表不全
    centos6.8下安装matlab2009(图片转帖)
    centos6.8下普通用户下quartus编程识别不到用户开发板
    centos6.8下安装破解quartus prime16.0以及modelsim ae安装
    PHP TP 生成二维码
    模态框MODAL的一些事件捕捉
    iOS微信第三方登录实现
    PHP ini 配置无效的坑给自己记录
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5174343.html
Copyright © 2020-2023  润新知