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: * class SegmentTreeNode { * public: * int start, end, max; * SegmentTreeNode *left, *right; * SegmentTreeNode(int start, int end, int max) { * this->start = start; * this->end = end; * this->max = max; * this->left = this->right = NULL; * } * } */ class Solution { public: /** *@param A: a list of integer *@return: The root of Segment Tree */ SegmentTreeNode * build(vector<int>& A) { int n=A.size(); return helper(A,0,n-1); } SegmentTreeNode *helper(vector<int>&A,int low,int high){ if(low>high) return NULL; SegmentTreeNode* root=new SegmentTreeNode(low,high,findmax(A,low,high)); if(low==high){ return root; } if(low<high){ int mid=low+(high-low)/2; root->left=helper(A,low,mid); root->right=helper(A,mid+1,high); return root; } } int findmax(vector<int>&A,int low,int high){ int mmax=A[low]; for(int i=low;i<=high;i++){ mmax=max(mmax,A[i]); } return mmax; } };