lintcode-medium-Segment Tree Build II
Posted 哥布林工程师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode-medium-Segment Tree Build II相关的知识,希望对你有一定的参考价值。
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:
- 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 a given array, so that we can create a corresponding segment tree with every node value represent the corresponding interval max value in the array, return the root of this segment tree.
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
Given [3,2,1,4]
. The segment tree will be:
[0, 3] (max = 4) / [0, 1] (max = 3) [2, 3] (max = 4) / \ / [0, 0](max = 3) [1, 1](max = 2)[2, 2](max = 1) [3, 3] (max = 4)
/** * Definition of SegmentTreeNode: * public class SegmentTreeNode { * public int start, end, max; * public SegmentTreeNode left, right; * public SegmentTreeNode(int start, int end, int max) { * this.start = start; * this.end = end; * this.max = max * this.left = this.right = null; * } * } */ public class Solution { /** *@param A: a list of integer *@return: The root of Segment Tree */ public SegmentTreeNode build(int[] A) { // write your code here if(A == null || A.length == 0) return null; return build(A, 0, A.length - 1); } public SegmentTreeNode build(int[] A, int start, int end){ if(start == end){ return new SegmentTreeNode(start, end, A[start]); } int mid = start + (end - start) / 2; SegmentTreeNode left = build(A, start, mid); SegmentTreeNode right = build(A, mid + 1, end); SegmentTreeNode root = new SegmentTreeNode(start, end, Math.max(left.max, right.max)); root.left = left; root.right = right; return root; } }
以上是关于lintcode-medium-Segment Tree Build II的主要内容,如果未能解决你的问题,请参考以下文章
lintcode-medium-Segment Tree Modify
lintcode-medium-Segment Tree Query II