@@ -20,25 +20,29 @@ export function build(
20
20
node : TreeNode ,
21
21
start : number ,
22
22
end : number ,
23
- nums : number [ ] ,
23
+ nums : number [ ]
24
24
) {
25
25
if ( start === end ) {
26
26
node . val = nums [ start ] ;
27
27
return ;
28
28
}
29
29
const mid = Math . floor ( ( start + end ) / 2 ) ;
30
+ pushdown ( start , end , node ) ;
31
+ if ( node . left ) build ( node . left , start , mid , nums ) ;
32
+ if ( node . right ) build ( node . right , mid + 1 , end , nums ) ;
33
+ pushup ( node ) ;
34
+ }
35
+ function pushdown ( start : number , end : number , node : TreeNode ) {
30
36
node . left = new TreeNode ( ) ;
31
37
node . right = new TreeNode ( ) ;
32
- build ( node . left , start , mid , nums ) ;
33
- build ( node . right , mid + 1 , end , nums ) ;
34
- node . val = node . left . val + node . right . val ;
35
38
}
39
+
36
40
export function change (
37
41
index : number ,
38
42
val : number ,
39
43
node : TreeNode ,
40
44
start : number ,
41
- end : number ,
45
+ end : number
42
46
) : void {
43
47
if ( start === end ) {
44
48
node . val = val ;
@@ -53,14 +57,18 @@ export function change(
53
57
} else {
54
58
change ( index , val , node . right , mid + 1 , end ) ;
55
59
}
56
- node . val = node . left . val + node . right . val ;
60
+ pushup ( node ) ;
57
61
}
62
+ function pushup ( node : TreeNode ) {
63
+ node . val = ( node . left ?. val ?? 0 ) + ( node . right ?. val ?? 0 ) ;
64
+ }
65
+
58
66
export function query (
59
67
left : number ,
60
68
right : number ,
61
69
node : TreeNode ,
62
70
start : number ,
63
- end : number ,
71
+ end : number
64
72
) : number {
65
73
if ( start === left && right === end ) {
66
74
return node . val ;
0 commit comments