
平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

public class SegmentTree {
private E[] tree;
private E[] data;
private Merger merger;
public SegmentTree(E[] arr, Merger merger){
this.merger = merger;
data = (E[])new Object[arr.length];
for(int i = 0 ; i = data.length)
throw new IllegalArgumentException("Index is illegal.");
return data[index];
}
// 返回完全二叉树的数组表示中,一个索引所表示的元素的左孩子节点的索引
private int leftChild(int index){
return 2*index + 1;
}
// 返回完全二叉树的数组表示中,一个索引所表示的元素的右孩子节点的索引
private int rightChild(int index){
return 2*index + 2;
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append('[');
for(int i = 0 ; i // 在以treeIndex为根的线段树中[l...r]的范围里,搜索区间[queryL...queryR]的值
private E query(int treeIndex, int l, int r, int queryL, int queryR){
if(l == queryL && r == queryR)
return tree[treeIndex];
int mid = l + (r - l) / 2;
// treeIndex的节点分为[l...mid]和[mid+1...r]两部分
int leftTreeIndex = leftChild(treeIndex);
int rightTreeIndex = rightChild(treeIndex);
if(queryL >= mid + 1)
return query(rightTreeIndex, mid + 1, r, queryL, queryR);
else if(queryR /// 303. Range Sum Query - Immutable
/// https://leetcode.com/problems/range-sum-query-immutable/description/
class NumArray {
private SegmentTree segmentTree;
public NumArray(int[] nums) {
if(nums.length > 0){
Integer[] data = new Integer[nums.length];
for (int i = 0; i (data, (a, b) -> a + b);
}
}
public int sumRange(int i, int j) {
if(segmentTree == null)
throw new IllegalArgumentException("Segment Tree is null");
return segmentTree.query(i, j);
}
} /// 303. Range Sum Query - Immutable
/// https://leetcode.com/problems/range-sum-query-immutable/description/
public class NumArray2 {
private int[] sum; // sum[i]存储前i个元素和, sum[0] = 0
// 即sum[i]存储nums[0...i-1]的和
// sum(i, j) = sum[j + 1] - sum[i]
public NumArray2(int[] nums) {
sum = new int[nums.length + 1];
sum[0] = 0;
for(int i = 1 ; i 因为遍历节点几乎是全部节点,所以约等于O(n)复杂度,所以可以采用懒惰更新 ,不去更新叶子节点,等下次使用的时候再更新



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2799/viewspace-2805387/ ,如需转载,请注明出处,否则将追究法律责任。