Skip to content

Commit

Permalink
SegmentTree perfection.
Browse files Browse the repository at this point in the history
  • Loading branch information
liusishan committed Feb 27, 2019
1 parent a38d380 commit 26310dc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
8 changes: 8 additions & 0 deletions 09-Segment-Tree/01-Segment-Tree-Basics/src/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,13 @@
public class Main {
public static void main(String[] args) {

Integer[] nums = {-2, 0, 3, -5, 2 - 1};
SegmentTree<Integer> segmentTree = new SegmentTree<>(nums, new Merger<Integer>() {
@Override
public Integer merge(Integer a, Integer b) {
return a + b;
}
});
System.out.println(segmentTree);
}
}
19 changes: 18 additions & 1 deletion 09-Segment-Tree/01-Segment-Tree-Basics/src/SegmentTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public SegmentTree(E[] arr, Merger<E> merger) {
data[i] = arr[i];

tree = (E[]) new Object[4 * arr.length];
buildSegmentTree(0, 0, data.length);
buildSegmentTree(0, 0, data.length - 1);
}

// 在treeIndex的位置创建表示区间[l...r]的线段树
Expand Down Expand Up @@ -60,4 +60,21 @@ private int rightChild(int index) {
return 2 * index + 2;
}

@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append('[');
for (int i = 0; i < tree.length; i++) {
if (tree[i] != null)
res.append(tree[i]);
else
res.append("null");

if (i != tree.length - 1)
res.append(", ");
}
res.append(']');
return res.toString();
}

}

0 comments on commit 26310dc

Please sign in to comment.