@@ -224,27 +224,26 @@ public:
224
224
*/
225
225
226
226
function pathSum(root : TreeNode | null , target : number ): number [][] {
227
- const res = [];
227
+ const res: number [][] = [];
228
228
if (root == null ) {
229
229
return res ;
230
230
}
231
- const dfs = (
232
- { val , right , left }: TreeNode ,
233
- target : number ,
234
- values : number []
235
- ) => {
236
- values .push (val );
231
+ const paths: number [] = [];
232
+ const dfs = ({ val , right , left }: TreeNode , target : number ) => {
233
+ paths .push (val );
237
234
target -= val ;
238
235
if (left == null && right == null ) {
239
236
if (target === 0 ) {
240
- res .push (values );
237
+ res .push ([ ... paths ] );
241
238
}
239
+ paths .pop ();
242
240
return ;
243
241
}
244
- left && dfs (left , target , [... values ]);
245
- right && dfs (right , target , [... values ]);
242
+ left && dfs (left , target );
243
+ right && dfs (right , target );
244
+ paths .pop ();
246
245
};
247
- dfs (root , target , [] );
246
+ dfs (root , target );
248
247
return res ;
249
248
}
250
249
```
@@ -277,38 +276,40 @@ impl Solution {
277
276
fn dfs (
278
277
root : & Option <Rc <RefCell <TreeNode >>>,
279
278
mut target : i32 ,
280
- mut values : Vec <i32 >,
279
+ paths : & mut Vec <i32 >,
281
280
) -> Vec <Vec <i32 >> {
282
281
let node = root . as_ref (). unwrap (). borrow ();
283
- values . push (node . val);
282
+ paths . push (node . val);
284
283
target -= node . val;
285
284
let mut res = vec! [];
286
285
// 确定叶结点身份
287
286
if node . left. is_none () && node . right. is_none () {
288
287
if target == 0 {
289
- res . push (values );
288
+ res . push (paths . clone () );
290
289
}
290
+ paths . pop ();
291
291
return res ;
292
292
}
293
293
if node . left. is_some () {
294
- let res_l = Solution :: dfs (& node . left, target , values . clone () );
294
+ let res_l = Solution :: dfs (& node . left, target , paths );
295
295
if ! res_l . is_empty () {
296
296
res = [res , res_l ]. concat ();
297
297
}
298
298
}
299
299
if node . right. is_some () {
300
- let res_r = Solution :: dfs (& node . right, target , values . clone () );
300
+ let res_r = Solution :: dfs (& node . right, target , paths );
301
301
if ! res_r . is_empty () {
302
302
res = [res , res_r ]. concat ();
303
303
}
304
304
}
305
+ paths . pop ();
305
306
res
306
307
}
307
308
pub fn path_sum (root : Option <Rc <RefCell <TreeNode >>>, target : i32 ) -> Vec <Vec <i32 >> {
308
309
if root . is_none () {
309
310
return vec! [];
310
311
}
311
- Solution :: dfs (& root , target , vec! [])
312
+ Solution :: dfs (& root , target , & mut vec! [])
312
313
}
313
314
}
314
315
```
0 commit comments