File tree Expand file tree Collapse file tree 3 files changed +195
-0
lines changed
solution/1100-1199/1110.Delete Nodes And Return Forest Expand file tree Collapse file tree 3 files changed +195
-0
lines changed Original file line number Diff line number Diff line change @@ -348,4 +348,74 @@ var delNodes = function (root, to_delete) {
348
348
349
349
<!-- solution: end -->
350
350
351
+ <!-- solution: start -->
352
+
353
+ ### Solution 2: BFS
354
+
355
+ <!-- tabs: start -->
356
+
357
+ #### TypeScript
358
+
359
+ ``` ts
360
+ /**
361
+ * Definition for a binary tree node.
362
+ * class TreeNode {
363
+ * val: number
364
+ * left: TreeNode | null
365
+ * right: TreeNode | null
366
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
367
+ * this.val = (val===undefined ? 0 : val)
368
+ * this.left = (left===undefined ? null : left)
369
+ * this.right = (right===undefined ? null : right)
370
+ * }
371
+ * }
372
+ */
373
+ export function delNodes(root : T , to_delete : number []): Array <T > {
374
+ if (! root ) return [];
375
+
376
+ const del = new Set (to_delete );
377
+ const res: T [] = [];
378
+ let q: TreeNode [] = [root ];
379
+
380
+ while (q .length ) {
381
+ const qNext: TreeNode [] = [];
382
+
383
+ for (const node of q ) {
384
+ if (node .left ) {
385
+ qNext .push (node .left );
386
+
387
+ if (del .has (node .left .val )) {
388
+ node .left = null ;
389
+ }
390
+ }
391
+
392
+ if (node .right ) {
393
+ qNext .push (node .right );
394
+
395
+ if (del .has (node .right .val )) {
396
+ node .right = null ;
397
+ }
398
+ }
399
+
400
+ if (del .has (node .val )) {
401
+ if (node .left ) res .push (node .left );
402
+ if (node .right ) res .push (node .right );
403
+ }
404
+ }
405
+
406
+ q = qNext ;
407
+ }
408
+
409
+ if (! del .has (root .val )) res .push (root );
410
+
411
+ return res ;
412
+ }
413
+
414
+ type T = TreeNode | null ;
415
+ ```
416
+
417
+ <!-- tabs: end -->
418
+
419
+ <!-- solution: end -->
420
+
351
421
<!-- problem: end -->
Original file line number Diff line number Diff line change @@ -344,4 +344,74 @@ var delNodes = function (root, to_delete) {
344
344
345
345
<!-- solution: end -->
346
346
347
+ <!-- solution: start -->
348
+
349
+ ### Solution 2: BFS
350
+
351
+ <!-- tabs: start -->
352
+
353
+ #### TypeScript
354
+
355
+ ``` ts
356
+ /**
357
+ * Definition for a binary tree node.
358
+ * class TreeNode {
359
+ * val: number
360
+ * left: TreeNode | null
361
+ * right: TreeNode | null
362
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
363
+ * this.val = (val===undefined ? 0 : val)
364
+ * this.left = (left===undefined ? null : left)
365
+ * this.right = (right===undefined ? null : right)
366
+ * }
367
+ * }
368
+ */
369
+ export function delNodes(root : T , to_delete : number []): Array <T > {
370
+ if (! root ) return [];
371
+
372
+ const del = new Set (to_delete );
373
+ const res: T [] = [];
374
+ let q: TreeNode [] = [root ];
375
+
376
+ while (q .length ) {
377
+ const qNext: TreeNode [] = [];
378
+
379
+ for (const node of q ) {
380
+ if (node .left ) {
381
+ qNext .push (node .left );
382
+
383
+ if (del .has (node .left .val )) {
384
+ node .left = null ;
385
+ }
386
+ }
387
+
388
+ if (node .right ) {
389
+ qNext .push (node .right );
390
+
391
+ if (del .has (node .right .val )) {
392
+ node .right = null ;
393
+ }
394
+ }
395
+
396
+ if (del .has (node .val )) {
397
+ if (node .left ) res .push (node .left );
398
+ if (node .right ) res .push (node .right );
399
+ }
400
+ }
401
+
402
+ q = qNext ;
403
+ }
404
+
405
+ if (! del .has (root .val )) res .push (root );
406
+
407
+ return res ;
408
+ }
409
+
410
+ type T = TreeNode | null ;
411
+ ```
412
+
413
+ <!-- tabs: end -->
414
+
415
+ <!-- solution: end -->
416
+
347
417
<!-- problem: end -->
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * class TreeNode {
4
+ * val: number
5
+ * left: TreeNode | null
6
+ * right: TreeNode | null
7
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8
+ * this.val = (val===undefined ? 0 : val)
9
+ * this.left = (left===undefined ? null : left)
10
+ * this.right = (right===undefined ? null : right)
11
+ * }
12
+ * }
13
+ */
14
+ export function delNodes ( root : T , to_delete : number [ ] ) : Array < T > {
15
+ if ( ! root ) return [ ] ;
16
+
17
+ const del = new Set ( to_delete ) ;
18
+ const res : T [ ] = [ ] ;
19
+ let q : TreeNode [ ] = [ root ] ;
20
+
21
+ while ( q . length ) {
22
+ const qNext : TreeNode [ ] = [ ] ;
23
+
24
+ for ( const node of q ) {
25
+ if ( node . left ) {
26
+ qNext . push ( node . left ) ;
27
+
28
+ if ( del . has ( node . left . val ) ) {
29
+ node . left = null ;
30
+ }
31
+ }
32
+
33
+ if ( node . right ) {
34
+ qNext . push ( node . right ) ;
35
+
36
+ if ( del . has ( node . right . val ) ) {
37
+ node . right = null ;
38
+ }
39
+ }
40
+
41
+ if ( del . has ( node . val ) ) {
42
+ if ( node . left ) res . push ( node . left ) ;
43
+ if ( node . right ) res . push ( node . right ) ;
44
+ }
45
+ }
46
+
47
+ q = qNext ;
48
+ }
49
+
50
+ if ( ! del . has ( root . val ) ) res . push ( root ) ;
51
+
52
+ return res ;
53
+ }
54
+
55
+ type T = TreeNode | null ;
You can’t perform that action at this time.
0 commit comments