Skip to content

Commit

Permalink
SegmentTree add set().
Browse files Browse the repository at this point in the history
  • Loading branch information
liusishan committed Mar 5, 2019
1 parent 96628e1 commit 0ee6dd6
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions 09-Segment-Tree/01-Segment-Tree-Basics/src/SegmentTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,35 @@ else if (queryR <= mid)
return merger.merge(leftResult, rightResult);
}

// 将index 位置的值,更新为e
public void set(int index, E e) {

if (index < 0 || index >= data.length)
throw new IllegalArgumentException("Index is illegal.");

data[index] = e;
set(0, 0, data.length - 1, index, e);
}

private void set(int treeIndex, int l, int r, int index, E e) {

if (l == r) {
tree[treeIndex] = e;
return;
}

int mid = l + (r - l) / 2;
int leftTreeIndex = leftChild(treeIndex);
int rightTreeIndex = rightChild(treeIndex);
if (index >= mid + 1)
set(rightTreeIndex, mid + 1, r, index, e);
else //index <= mid
set(leftTreeIndex, l, mid, index, e);

tree[treeIndex] = merger.merge(tree[leftTreeIndex], tree[rightTreeIndex]);
}


@Override
public String toString() {
StringBuilder res = new StringBuilder();
Expand Down

0 comments on commit 0ee6dd6

Please sign in to comment.