标签:
The structure of Segment Tree is a binary tree which each node has two attributesstart
and end
denote an segment / interval.
start and end are both integers, they should be assigned in following rules:
build
method.start=A.left, end=(A.left + A.right) / 2
.start=(A.left + A.right) / 2 + 1, end=A.right
.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.
Segment Tree (a.k.a Interval Tree) is an advanced data structure which can support queries like:
See wiki:
Segment Tree
Interval Tree
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]
/** * 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; if(start == end) return new SegmentTreeNode(start, end); SegmentTreeNode root = new SegmentTreeNode(start, end); SegmentTreeNode left = build(start, start + (end - start) / 2); SegmentTreeNode right = build(start + (end - start) / 2 + 1, end); root.left = left; root.right = right; return root; } }
lintcode-medium-Segment Tree Build
标签:
原文地址:http://www.cnblogs.com/goblinengineer/p/5356087.html