Предположим, есть массив с n = 5
int [] arr = {1,2,3,4,5};
и
int [] segmentTree = new int[n*4];
Вот код для построения этого сегмента Tree
buildSegmentTree(a , 1 , 0 , n-1);
void buildSegmentTree(int [] a , int vertex , int leftLimit , int rightLimit)
{
if(leftLimit == rightLimit)
segmentTree[vertex] = a[leftLimit];
else
{
int mid = (leftLimit + rightLimit)/2;
//Builds the left part of the Segment Tree
buildSegmentTree(a , vertex * 2 , leftLimit , mid);
//Builds the right part of the Segment Tree
buildSegmentTree(a , vertex*2 + 1 , mid+1 , rightLimit);
segmentTree[vertex] = segmentTree[vertex*2] + segmentTree[vertex*2 + 1];
}
}
Когда я печатаю значения дерева сегментов, это вывод, который я получаю
0 15 6 9 3 3 4 5 1 2 0 0 0 0 0 0 0 0 0 0
Я понимаючто означают эти значения (например, 15 - это сумма 6 и 9), но я не понимаю, как они сохраняются и как выполняются вызовы.