0307 - TommyFu/leetcode-javascript GitHub Wiki
https://leetcode.com/problems/range-sum-query-mutable/
线段树。
举例来说[2, 4, 6, 8, 10],如图所示建立线段树。
黑色为数组下标,红色是这个线段对应元素的和。
update和sumRange的复杂度都是O(logn)。
建立线段树:
root节点的长度就是入参数组的长度,找出middle,递归建立左子树和右子树。
update操作:
从上往下找到要更新的叶子节点,递归回溯的时候,把祖先的节点的val也一起更新了。
sumRange操作:
找到目标线段,返回val,如果结果分散在左右子树中,分开找到之后相加。